c/c++语言开发共享编译器不会在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 selectedn"); } printf("exiting main"); return 0; } 

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

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

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

    只需在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

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐