c/c++语言开发共享scanf()被跳过了

嗨刚刚开始学习c for uni(通常使用目标c)并遇到一个与scanf有关的奇怪问题,我有以下代码

while(stringCheck == 0){ scanf("%c",&computerType); computerType = toupper(computerType); if ( computerType == 'L') { /*set stringCheck to 1 so the scanf while loop breaks*/ stringCheck = 1; counter = 0; } else { printf("ERRORn"); } } 

我打印出“ERROR”然后要求输入(因此它第一次跳过scanf语句)。 如果我将它更改为另一个字符串变量,它可以正常工作,它会在第一次停止。

其余的代码工作正常,它只是在它进入烦人的循环时打印错误的事实。

我尝试过getChar()并且它做了同样的事情。

感谢您提供的任何帮助。

    如果它在您第一次进入循环时打印错误,那么输入缓冲区中已经存在某些内容。 我保证(假设您的编译器没有脑死亡)它没有跳过scanf 。 您应该通过更改来检查它实际接收的内容:

     printf("ERRORn"); 

    至:

     printf("ERROR, code = %02xn", computerType); 

    我建议这是你上一次程序运行该代码时的换行符(你说这是第一次,但不清楚你是否意味着第一次进入该循环(自程序启动以来)或第一次进入该循环但是你在这个程序运行之前就已经完成了它。

    当您第一次输入L ENTER时,您的代码将拉出L不是 ENTER 。 如果您再次调用该代码,它将获得ENTER键。

    您应该了解并允许实际输入的内容或使用像这样的安全和声音输入function。

    你应该总是检查scanf()的返回值; 它告诉你有多少转换成功了。 在这种情况下,如果你没有回到1,你就会遇到问题。 第一次循环, scanf()读取一个字符 – 但不是一个ell( lL ),因为你说你得到一条错误信息。 下一次迭代尝试读取换行符或前一个错误字符后面的任何其他内容,换行符当然不是一个列,其他字符很可能也不是一个列,因此产生至少一个错误消息。 您将获得为每个非椭圆字符打印的错误。

    通常,如果使用scanf() ,则很难从错误中恢复。 你可能最好将一行读入缓冲区(字符数组)并使用sscanf()来解析它。

    你应该只需要在%c之前添加一个空格。 我不确定它为什么会起作用,但确实如此。 其他数据类型也会发生这种情况。

    scanf替换scanf语句scanf(" %c",&computerType);

      以上就是c/c++开发分享scanf()被跳过了相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/522372.html

      (0)
      上一篇 2020年12月9日
      下一篇 2020年12月9日

      精彩推荐