[英]C Programming : for loop and 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數組中。 采用
char a[N][M];
代替。 我的gcc對您的錯誤代碼發出警告。 其他編譯器可能會默默地忽略這一點。
不過,在小端環境(如PC)中,人們可能會認為:存儲在int變量地址處的char應該產生相同的值。 但是,char值僅占用一個字節,其余字節(3個或更多)保持未初始化狀態。 如果之前有零字節,則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];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.