0

ここでCを学ぶ初心者プログラマー

私のコードの一部はユーザーに数値入力を要求し、入力された値が数値かどうかを確認するために while ループに入り、そうでない場合は while ループが入力をクリアし (無限ループを停止するため)、数値を要求します。また。

問題は、入力をクリアしてから while ループで再度 scanf() を要求すると、明らかに 2 回クリアされ、結果を得るために数値を再度入力する必要があることです。

問題のコードの一部を次に示します。

int askNum()
{
    int number;
    int check;

    printf("Enter a number: ");
    check = scanf("%d", &number);

    while(scanf("%d", &number) != 1)
    {
        printf("You've entered an incorrect number.\nEnter a number: ");
        fflush(stdin);
        check = scanf("%d", &number);
    }    
    return number;
}

誰かがこれを行う理由を説明できる場合は、説明するか、続行する方法についてのヒントを教えてください。

どうもありがとう!

4

2 に答える 2

3

fflush(stdin)C 標準では定義されていません。これは、異なるコンパイラが異なることを行う可能性があることを意味します。私のはそれを完全に無視します。コンパイラが何をしているのか、またはそれに関連してなぜ奇妙なことが起こるのかを説明するのは困難です。

プログラムから信頼できる動作を得るには、標準コードに固執してください。

ループ構造は正しいですが、fflush(stdin)これまでに入力されたすべての文字を読み取って破棄するコードに置き換える必要があります。はデフォルトで行バッファリングされるためstdin、改行に到達して停止するまで読み続ける必要があることを意味します。その後、物事は別の準備が整いscanf("%d"ます。

これを実際にコーディングするにはさまざまな方法があります。メディノックの答えは 1 つです。another は の[指定子ですscanf。EOF が発生した場合は、ループを終了する必要もあります。(そうしないと、入力ストリームが閉じている場合に無限ループに入ります)。

于 2014-05-29T23:18:03.530 に答える