while循环第二次忽略scanf

时间:2011-11-28 19:10:14

标签: c while-loop scanf

#include <stdio.h>

int main ()
{
    char loop='y';
    while(loop != 'n') {
        printf("loop? ");
        scanf("%c", &loop);
        if(loop != 'y') {
            loop='n';
        }
    }
    return 0;
}

如果我键入'y',他会重新启动while循环但第二次忽略scanf并在此之后结束循环。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:15)

确保scanf丢弃换行符。将其更改为:

scanf(" %c", &loop);
       ^

答案 1 :(得分:10)

您可能需要输入换行符才能输入您的程序,对吧?第二次循环执行时,它会读取换行符,该行正在“等待”读取并自动退出循环('\n' != 'y')。您可以通过使用此格式字符串来使scanf忽略空格:

" %c"

答案 2 :(得分:-2)

一个解决方案可以是在fflush(stdin)语句之后使用scanf()来清除输入缓冲区。