0

大约两三天前,我最近开始使用 C 编程语言,但是在使用 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>,stdin 缓冲区中有尾随的换行符。更好地使用fgets()

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

我会使用 getchar ,因为它对您的目的更具确定性。还要确保再添加一个 getchar 来检查换行符。

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

于 2013-06-22T20:58:52.307 回答