0

私は最近 C プログラミング言語を使い始めましたが、約 2、3 日前に、do-while ループを使用しているときに問題が発生しました。これは私のプログラムの一部であり、実行されません。

#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>

int main(void){        
    char another_game   =   'Y';
    scanf("%c", &another_game);
    do{
        printf("\nWould you like to continue(Y/N)?");
        scanf("%c", &another_game);
    }while(toupper(another_game) == 'Y');
    return 0;
}

'Y'ループは、ユーザーが入力している限り、またはプロンプトが表示されている限り実行を続けると想定されてい'y'ますが、プログラムが最初にループを実行した後、質問が再度表示され、ループが中断することに気付きました。1ユーザーが続行したいとき、または終了したいときに入力できるように、整数を使用してみました0が、うまくいきました。なぜこれができないのかわかりません。この問題を解決するためのすべての助けに感謝します、ありがとう

4

2 に答える 2

5

を押す<enter>と、標準入力バッファーに末尾の改行文字があるためです。fgets()代わりに使用することをお勧めします:

char buf[0x10];
fgets(buf, sizeof(buf), stdin);
if (toupper(buf[0]) == 'Y') {
    // etc.
}
于 2013-06-22T20:20:23.060 に答える
2

あなたの目的にとってより決定論的であるため、私は getchar を使用します。また、改行文字をチェックする getchar をもう 1 つ追加してください。

do { printf("enter Y/N\n"); } while( ( (toupper(getchar()) == 'Y') + (getchar() == '\n') ) == 2);

于 2013-06-22T20:58:52.307 に答える