c/c++语言开发共享在scanf获得意外数据后,C程序无限循环

我有一个程序,我希望输入整数在2到64之间,所以我把scanf放在do { ... } while循环中。 这是我最初测试的代码:

 int initialBase; do { printf("Initial base: "); scanf("%i", &initialBase); } while (initialBase  64); 

问题是每当输入不是有效整数时,它只是无限地输出printf语句而不再提示用户输入,立即充斥控制台。 为什么会发生这种情况?阅读满足我想要条件的输入的更好方法是什么?

    scanf()失败时,参数不会自动初始化,未初始化的值可以是任何值,因此它可能小于2或大于64没有人知道。

    试试这个

     int initialBase; /* some default value would be good. */ initialBase = 2; do { printf("Initial base: "); if (scanf("%i", &initialBase) != 1) break; } while ((initialBase < 2) || (initialBase > 64)); 

    如果你输入一些不是数字的东西,那么检查会突破循环,初始化初始化只是一个好习惯,在你的情况下可能会阻止你描述的行为,但在这种情况下,它会阻止访问未初始化的while循环后的值。

    循环没有停止的原因是因为scanf()在输入流中没有匹配时会留下一些字符,并且再次调用scanf()而这些字符仍然存在会使scanf()继续等待有效输入,但是立即返回流中当前无效的输入,如果你想继续阅读,尝试从流中读取字符,直到找到'n' ,这样

     int initialBase; initialBase = 0; do { printf("Initial base: "); if (scanf("%i", &initialBase) != 1) { while (fgetc(stdin) != 'n'); continue; } } while ((initialBase < 2) || (initialBase > 64)); 

      以上就是c/c++开发分享在scanf获得意外数据后,C程序无限循环相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

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

      精彩推荐