-4
#include <stdio.h>


int main()
{
    int x, y, i, temp, sum;
    char j = 'y';
    do
    {
        ...stuff...
        printf ("\nPlay again? (y\\n)\n");
        scanf("%c",&j);
    }
    while (j == 'y');
    return 0;
}

プログラムは操作を 1 回実行し、ユーザーからの入力を待たずに終了します。一度実行すると、「続行するには何かキーを押してください」と表示されます。これはどのように修正できますか?

4

3 に答える 3

2

これは通常、「もの」が入力ストリームにいくつかの文字を残し、それがscanf正常に読み取られることを意味します。バッファ内のものはおそらくない'y'ので、ループは終了します。

1 つの解決策は、doint を実行する前に入力ストリームをフラッシュすることscanfです。ここを参照してくださいCで入力バッファをクリアする方法は?

多くの場合、バッファーに残っているデータは通常空白 (改行文字など) であるため、単純な解決策の 1 つはscanf(" %c", ...)( の前の余分なスペースに注意してください%c) またはscanf("%s", ...). どちらの場合も、保留中の空白は自動的にスキップされます。

于 2013-10-27T19:07:47.577 に答える
0

おそらく、ゲーム ループにいくつかの残留入力があり (少なくとも、例のゲーム ループのように見えます)、j変数に読み込まれます。これが、一度実行され、入力がなく、終了するシナリオのように見える理由です。

これを修正するには、play again プロンプトが表示される前に、入力ストリームをフラッシュしてみてください。何かのようなもの:

fseek(stdin,0,SEEK_END);
于 2013-10-27T19:09:40.303 に答える