【问题标题】:Initialize 2D Array with characters c++用字符c ++初始化二维数组
【发布时间】:2014-05-14 13:44:40
【问题描述】:

我正在尝试初始化一个二维数组以创建一个地图,该地图将在程序开始时打印出星星。我在一个函数中进行了初始化。每当我尝试运行该程序时,我都会得到疯狂的数字。关于如何使这个二维数组正确的任何提示?这是我的代码和我得到的结果:

void InitializeArray()
{
char map[Y_DIM][X_DIM];

for (int row = 0; row < Y_DIM; row++)
{
   for (int col = 0; col < X_DIM; col++)
   {
      cout << map[row][col];
      cout << "*";
   }
cout << endl;
}
}

这是我的结果

`*2*.*v*/***************
******************
?*?*?*u*/****?*?*?*?*?*?*?*?*?*!*`**
****?*!*`******?*!*`******
?*-*?**?****U*?*7*v*/****?**@**
****?*?*7*v*/*****E*]*v*/****
?*!*`*******-*?**?****?*!*`**
****?**@******p*    *@******
?*-*?**?****************
****?*?*7*v*/****p* *@******

【问题讨论】:

  • '我正在尝试初始化一个二维数组'。我没有看到你的初始化。

标签: c++ arrays char 2d


【解决方案1】:

我会做什么:

#include <iostream>
using namespace std;
const int Y_DIM = 8;
const int X_DIM = 9;
void initializeArray() {
    char map[Y_DIM][X_DIM]={'*'};
    for (int row = 0; row < Y_DIM; row++)
    {
        for (int col = 0; col < X_DIM; col++)
        {
            map[row][col]='*';
            cout << map[row][col];
        }
    cout << "\n";   
}
}
int main() {
    initializeArray();
    return 0;
}

输出

*********
*********
*********
*********
*********
*********
*********
*********

Try it on ideone.com

【讨论】:

  • ={'*'}; 是多余的。
  • @πάνταῥεῖ 只要确保它得到分配。有一次我制作了string str;,然后当我试图查看它包含的内容时得到了一些垃圾。然后更改为string str = "";,一切恢复正常:)
  • 在这种情况下,它将导致 map 的第一个元素被初始化为 '*' 并且所有后续元素都得到 0。然后你在循环中覆盖这些值,所以 πάντα ῥεῖ 是对:这是多余的。
  • @David,如果 string 的故事属实,那么您的程序中还有其他一些内存损坏,恰好溢出并读取了您的字符串的内存
  • @MattMcNabb 是的,从那时起我一直在初始化我的所有变量。 D:
【解决方案2】:

这不是初始化数组,而是打印它。鉴于它没有初始化,它会打印垃圾。

代替:

 cout << map[row][col];

你想要的:

map[row][col] = '*';

这将为数组中的每个单元格设置初始值,也就是说,对其进行初始化。

您也可以在使用 C++ 的数组初始值设定项语法定义数组的同时执行此操作,但您的方法更好。

【讨论】:

  • 我需要初始化然后打印。我将如何初始化?
  • @savannaalexis '我将如何初始化?'他只是在他的回答中写了这个:map[row][col] = '*';!!
猜你喜欢
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 2011-06-04
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多