任何人都可以告诉我为什么每当我按下字母X时循环都不会退出?如何使程序无法获得退格的值并进入数组?
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#define N 2
#define M 4
int main()
{
int i,j,a[N][M];
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
scanf("%c",&a[i][j]);
if(a[i][j]=='X')
break;
}
if(a[i][j]=='X')
break;
}
return 0;
}
答案 0 :(得分:2)
将scanf("%c",&a[i][j]);
更改为scanf(" %c",&a[i][j]);
这允许在扫描角色之前绕过任何空格。
答案 1 :(得分:1)
您的代码中存在两个问题:
第一个已被指出 Rishikesh Raje:您需要在scanf()命令中添加一个空格,以便占用扫描的“\ n”字符。
然后,您扫描字符(%c)并尝试将它们存储在一个int数组中。使用
char a[N][M];
代替。我的gcc会对你错误的代码发出警告。其他编译器可能会默默地忽略它。
然而,在小端环境(像PC一样)中,我们可以想到:存储在int变量地址的char应该产生相同的值。但是,char值只占用一个字节,其余字节(3个或更多)保持未初始化。如果之前有零字节,则a[i][j]
将为'X',否则,它将是一些随机数。
这解释了行为,我认为你观察到:程序在某些'X'处随机停止,但并非总是如此。
答案 2 :(得分:0)
将数组a的类型从int更改为char
int i,j,a[N][M];
更改为
int i,j;
char a[N][M];
通常gcc也会警告你:
so.c: In function ‘main’:
so.c:16:9: warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘int *’ [-Wformat=]
scanf("%c",&a[i][j]);
答案 3 :(得分:0)
将其设为char数组而不是int数组
${err^}
而不是,
char a[N][M];