C中的Do-While循环

时间:2013-06-22 20:17:17

标签: c

我最近开始使用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,它有效,所以我不明白为什么这不会。我将非常感谢您解决此问题的所有帮助,谢谢

2 个答案:

答案 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);