我需要读取用户输入文件(所有数字的14 x 28文本文件),作为二维字符数组。我认为我已经完成了这段代码:
getline(cin, fileName);
cout << "\n";
infile.open(fileName.c_str());
if (infile.is_open())
for (int i = 0; i < 14; i++)
for (int j = 0; j < 28; j++)
infile >> map[i][j];
cout << map[14][28];
但是,使用此代码,我似乎无法将数组发送到输出以供查看。当我尝试查看数组的内容时,程序返回一个看起来像e的奇怪符号......这似乎不是一个内存地址所以我不确定这个数字是什么。
我还需要将地图数组中的数字表示为字母。例如0为a',a 1为'*',2为“W”,3为“k”。
我不确定如何对数组进行编码,以便在显示内容时数字显示为字母。
总而言之,
1.如何正确输入二维字符数组?
2.如何编码此数组,使其数字用字母表示?
3.如何在输出中显示此数组?
感谢任何帮助!
由于
答案 0 :(得分:0)
如果map声明为
char map[14][28];
然后声明
cout<< map[14][28];
应该崩溃。由于映射的最后一个有效索引是[13] [27](数组索引是基于0)并且您正在尝试访问超出范围的内存。要显示所有字符,您应该使用类似于输入的循环。
答案 1 :(得分:0)
创建另一个循环,类似于您在map
中读取的循环:
for (int i = 0; i < 14; i++) {
for (int j = 0; j < 28; j++) {
cout << map[i][j] << ","; // You can use a comma or whatever you want, like a space, etc.
}
cout << endl; // So each row is broken up, else it will all be on a single long line
}
如果你创建了一个Map
类,你可以覆盖<<
运算符,这样就可以像上面的例子那样输出cout << myMap
,如果你决定改变它的外观,你只能需要在一个位置(Map
类内)更改它。
我看到你更新了原帖。
打印出来时看到异常字符的一个原因是,char
数组显示为ASCII等效字符而不是数值。如果您想查看实际数字,则必须将其强制转换为(int)
:
for (int i = 0; i < 14; i++) {
for (int j = 0; j < 28; j++) {
cout << (int)map[i][j];
}
cout << endl;
}
输出时,您可以在打印前检查每个值:
for (int i = 0; i < 14; i++) {
for (int j = 0; j < 28; j++) {
if (map[i][j] == 0) cout << " ";
else if (map[i][j] == 1) cout << "*";
else if (map[i][j] == 2) cout << "W";
else if (map[i][j] == 3) cout << "k";
else cout << (int)map[i][j];
}
cout << endl;
}
将if...else if
更改为switch
语句是另一种选择,甚至可以创建包含以下结构的“替换数组”:
string replacement = " *Wk";
然后检查是否map[i][j] < 4
。如果评估为true,则使用
if (map[i][j] < 4) {
cout << replacement[ map[i][j] ];
else
cout << (int)map[i][j];