C编程:for循环和break



谁能告诉我为什么每当我按下字母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;
}

scanf("%c",&a[i][j]);改为scanf(" %c",&a[i][j]);

这允许在扫描字符之前绕过任何空格。

你的代码有两个问题:

  • 第一个已经由Rishikesh Raje:你需要在scanf()命令中添加一个空格,以便吃掉扫描的"n"字符。

  • 然后,扫描字符(%c)并尝试将它们存储在int-array中。使用

    char a[N][M];
    

    。我的gcc会对你的错误代码发出警告。其他编译器可能会忽略这个。

    然而,在小端环境中(如PC),人们可能会认为:存储在int变量地址的字符应该产生相同的值。但是,char-value只占用一个字节,其余字节(3个或更多)保持未初始化。如果之前有0字节,那么a[i][j]将是'X',否则将是某个随机数。

    这解释了行为,我想你观察到:程序在一些'X'随机停止,但并不总是。

将数组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]);

让它成为char数组而不是int数组

char a[N][M];

int a[N][M];

相关内容

  • 没有找到相关文章

最新更新