用C字符数组代替指定字符打印数字
我正在做一项任务,解决一个由2d字符数组创建的迷宫。为了测试这个程序,我制作了一个简单的4x4迷宫。但是,当打印到屏幕上时,迷宫是由数字组成的。我很困惑这是怎么发生的。任何帮助都将不胜感激 任务如下:用C字符数组代替指定字符打印数字,c,arrays,maze,C,Arrays,Maze,我正在做一项任务,解决一个由2d字符数组创建的迷宫。为了测试这个程序,我制作了一个简单的4x4迷宫。但是,当打印到屏幕上时,迷宫是由数字组成的。我很困惑这是怎么发生的。任何帮助都将不胜感激 任务如下: char *maze[4][4]; for (int i=0; i < 4; ++i) { maze[0][i] = "#"; maze[3][i] = "#"; maze[1][i] = "."; } maze[2][0] = "#"; maze[2][3] = "
char *maze[4][4];
for (int i=0; i < 4; ++i)
{
maze[0][i] = "#";
maze[3][i] = "#";
maze[1][i] = ".";
}
maze[2][0] = "#";
maze[2][3] = "#";
maze[2][1] = ".";
maze[2][2] = ".";
但它却打印:
0000
2222
0220
0000
应该是
maze[0][i] = '#';
和char*maze[4][4]
应该是字符迷宫[4][4]代码>
“#”
是字符串文字,请使用“#”
获得字符常量
如果确实要使用一个字符的字符串文字,则必须在原始程序中使用%s
转换规范,而不是%c
问题在于这一行
printf("%c",maze[i][j]);
您使用的不是字符,而是字符指针(又名字符串),因此应该是这样的:
printf("%s",maze[i][j]);
或者您也可以使用其他答案中描述的字符。在printf
调用中存在类型不匹配。您正在将maze[i][j]
打印为字符(%c
)。我建议打开编译器警告来捕捉这些类型的错误;gcc在我试图编译您的代码时发现了这个问题
它打印数字而不是字符的原因是printf
将字符串maze[i][j]
的地址解释为ASCII码点并打印相应的字符。对于编译器来说,“#”
和“
的地址恰好会导致打印字符0
和2
。我的情况不同;当我编译代码时,程序打印了EOT和ACK
最好的解决方案是将maze
声明为char
s数组,而不是字符串
char maze[4][4] = {
{ '#', '#', '#', '#' },
{ '.', '.', '.', '.' },
{ '#', '.', '.', '#' },
{ '#', '#', '#', '#' }
};
请在printf
文档中查找“%c”
的含义。欢迎来到Stack Overflow,谢谢您的提问!请阅读简短的介绍。它提到了;例如,有关格式的帮助可以在上找到。非常感谢大家。这有助于我的工作,迷宫现在正在正确打印。再次非常感谢您,现在开始下一步:char*maze[4][4]
不是二维字符数组,而是指向char
的二维指针数组maze
是我在编辑过程中与你的评论同时编辑的一个字符数组
printf("%c",maze[i][j]);
printf("%s",maze[i][j]);
char maze[4][4] = {
{ '#', '#', '#', '#' },
{ '.', '.', '.', '.' },
{ '#', '.', '.', '#' },
{ '#', '#', '#', '#' }
};