1

Cプログラミングを学ぶだけで、Do/Whileループについては些細なことだと私は確信しています。プログラムを終了するためにユーザーが「E」を押す必要があるコードのブロックがあります。

char exitletter;

do {
printf ("Please hit E to exit the Program\n");
exitletter = getchar();
} while (exitletter !='E');

ただし、ユーザーが間違った文字を入力すると、「Eを押してプログラムを終了してください」と2回出力されます。ユーザーが「abcd」と入力すると、メッセージが5回出力されます。

誰かがここで何が起こっているのか説明してもらえますか?

4

2 に答える 2

5

これは、最初に入力された改行文字によるものです。getchar

入力手段を与えるためにキーを押してからN押しているかどうかを検討してください。enter実際には、2つの文字を入力しています。1つはN改行文字(\n)です。最初にからgetchar読み取り、改行文字はバッファ自体に残ります。これで、ステートメントが出力され、2番目に移動しようとします。そのときは、1つの文字が既にバッファーで使用可能であるため、入力を待機しません。したがって、改行文字を読み取り、今度はでチェックします。また、ループは中断せず、statemntを出力し、ユーザーが入力を入力するのを3番目に待機します。NstdinstdingetcharstdinEgetchar

入力を与える方法がgetcharその文字を入力してEnterキーを押すようなものである場合は、この問題を取り除くのに役立つ以下のロジックを使用してください。

do {
    printf ("Please hit E to exit the Program\n");
    exitletter = getchar();
    while(exitletter == '\n')exitletter = getchar();
} while (exitletter !='E');
于 2013-02-02T18:43:53.890 に答える
1

遅いが別の答え:

fflushキャラクターを読んだ直後に電話をかけることができたはずです。

char exitletter;

    do {
        printf ("Please hit E to exit the Program\n");
        exitletter = getchar();
        fflush(stdin);
    } 
    while (exitletter !='E');

そして、これはあなたが期待したように機能したでしょう。

于 2013-02-02T19:10:00.913 に答える