簡體   English   中英

C編程:for循環和中斷

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM