编译器不会在scanf()上停止输入

这是一个小C代码

#include int main() { char ch='Y'; while(ch=='Y') { printf("\nEnter new value for Y "); scanf("%c",&ch); if(ch=='Y' || ch=='y') // do some work printf("Y was selected\n"); } printf("exiting main"); return 0; } 

我第一次输入’Y’作为输入(没有qoutes),循环返回true并第二次进入内部,但这次它没有在scanf()上停止用户输入。(请执行输入为为了清晰起见,’Y’。 输出如下所示:

在此处输入图像描述

如此处所示,编译器第二次没有停止输入。 这背后的原因是什么? 提前致谢 !

只需在scanf中放一个空格,如下所示:

 scanf(" %c",&ch); 

原因是你输入: Y\n (带回车)
scanf只读Y ! 所以在下一个scanf \n仍然在缓冲区中并且已经读入了!

因此,如果你现在有一个空间,在你阅读新内容之前就会有一个空格(看起来像这样:’\ n’)!

'\n'自动成为下一次迭代的输入。

为了避免这种情况,请使用getchar() 。 它会处理不需要的'\n'

 #include int main() { char ch='Y'; while(ch=='Y') { printf("\nEnter new value for Y "); scanf("%c",&ch); getchar(); //takes care of '\n' if(ch=='Y' || ch=='y') // do some work printf("Y was selected\n"); } printf("exiting main"); return 0; } 

代码现在工作正常。 以下是命令窗口中的代码段。

 Enter new value for YY Y was selected Enter new value for YY Y was selected Enter new value for Y _