这是一个小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 selectedn"); } printf("exiting main"); return 0; }
我第一次输入’Y’作为输入(没有qoutes),循环返回true并第二次进入内部,但这次它没有在scanf()上停止用户输入。(请执行输入为为了清晰起见,’Y’。 输出如下所示:
如此处所示,编译器第二次没有停止输入。 这背后的原因是什么? 提前致谢 !
只需在scanf中放一个空格,如下所示:
scanf(" %c",&ch);
原因是你输入: Yn
(带回车)
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 selectedn"); } 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 _
以上就是c/c++开发分享编译器不会在scanf()上停止输入相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549451.html