2017-12-05 9 views
3
#include <stdio.h> 

int main(){ 

    char quit = 'n'; 

    do{ 
    printf("Quit? (Y/N)"); 
    scanf("%c", &quit); 
    }while(quit=='n' || quit=='N'); 
} 

何も入力せずにプログラムが終了するのはなぜですか?なぜscanfでこのループが終了するのですか?

+2

を読む詳細については

#include <stdio.h> int main(){ char quit = 'n'; do{ printf("Quit? (Y/N)"); scanf(" %c", &quit); }while(quit=='n' || quit=='N'); } 

。 %cの前にスペースを入れてください。 scanf( "%c"、&quit); – achal

答えて

7

%cフォーマット指定子は、改行を含む任意の文字を受け入れます。したがって、Nを押すと、scanfがその文字を最初に読み込みますが、ENTERを押しても改行は入力バッファに残ります。次のループの繰り返しで改行文字が読み込まれます。また、改行がnまたはNでないため、ループは終了します。

フォーマット文字列の先頭にスペースを追加する必要があります。これは改行を含む先行する空白を吸収します。

scanf(" %c", &quit); 
1

だけにコードを変更:あなたは標準入力バッファをクリアする必要があり、このlink

関連する問題