0

入力した文字が大文字の場合にtrueを返し、文字「0」を入力するとループが停止するプログラムを作成しています。コードは次のとおりです。

#include <stdio.h>

int main (void)
{
    char c;
    do 
    {
        printf ("Please enter character to check if uppercase: ");
        c = getchar ();

        if ( (c >= 'A') && (c <= 'Z') )
        {
            printf ("true\n");
        }
        else
        {
            printf ("false\n");
        }
    } while ( c != '0');


    return 0;
}

ただし、奇妙な動作が発生します (出力):

大文字かどうかを確認する文字を入力してください: a

間違い

大文字かどうかを確認する文字を入力してください: false

大文字かどうかを確認する文字を入力してください: b

間違い

大文字かどうかを確認する文字を入力してください: false

大文字かどうかを確認する文字を入力してください: A

真実

大文字かどうかを確認する文字を入力してください: false

大文字かどうかを確認する文字を入力してください: 0

間違い

- プロンプトの後に来る「false」は、私が入力したものではありません。例えば:

  • 1.プロンプトが表示されます
  • 2. 文字「a」を入力します
  • 3.コンソールは偽を出力します
  • 4.プロンプトが表示されますが、プロンプトの横に「false」という単語も印刷されます
  • 5.プロンプトが再び表示されます

したがって、 getchar() は私からのものではない入力を受け取っているようです。何か案は?

4

2 に答える 2

2

改行を処理していません。

明確にするために、この回答を参照してください。

于 2013-08-05T07:00:34.050 に答える
2

getchar()次の反復で消費される改行文字を残します。改行を無視する別の getchar() を追加します。

c = getchar ();
getchar(); // To consume the newline

または、改行まですべて読み上げます。

int c=0;
while ((c = getchar()) != '\n' && c != EOF) ;
于 2013-08-05T06:58:41.523 に答える