私は次のプログラムを持っています:
int main(int argc, char *argv[])
{
char ch1, ch2;
printf("Input the first character:"); // Line 1
scanf("%c", &ch1);
printf("Input the second character:"); // Line 2
ch2 = getchar();
printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
printf("ch2=%c, ASCII code = %d\n", ch2, ch2);
system("PAUSE");
return 0;
}
上記のコードの作者のように説明している:ユーザーがEnterキーを押すライン1、で、それは2文字バッファ入力に残すため、プログラムが正しく動作しません:Enter key (ASCII code 13)
と\n (ASCII code 10)
。したがって、2行目では、を読み取り\n
、ユーザーが文字を入力するのを待ちません。
OK、これだ。しかし、私の最初の質問は、2番目のgetchar()
(ch2 = getchar();
)が文字Enter key (13)
ではなく、を読み取らないのはなぜ\n
ですか?
次に、著者はそのような問題を解決するための2つの方法を提案しました。
使用する
fflush()
次のような関数を記述します。
void clear (void) { while ( getchar() != '\n' ); }
このコードは実際に機能しました。しかし、私はそれがどのように機能するかを自分自身で説明することはできませんか?whileステートメントでは、を使用しているため、?getchar() != '\n'
以外の任意の1文字を読み取ることを意味します'\n'
。もしそうなら、入力バッファにはまだ'\n'
文字が残っていますか?