我最近开始使用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
,它有效,所以我不明白为什么这不会。我将非常感谢您解决此问题的所有帮助,谢谢
答案 0 :(得分:5)
因为当你按<enter>
时,stdin缓冲区中有尾随的换行符。更好地使用fgets()
代替:
char buf[0x10];
fgets(buf, sizeof(buf), stdin);
if (toupper(buf[0]) == 'Y') {
// etc.
}
答案 1 :(得分:2)
我会使用getchar,因为它会更符合你的目的。另外一定要添加一个getchar来检查换行符。
do {
printf("enter Y/N\n");
} while( ( (toupper(getchar()) == 'Y') + (getchar() == '\n') ) == 2);