while循环第二次忽略scanf

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

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

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

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

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

 " %c" 

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