c/c++语言开发共享过滤的scanf导致无限循环

我通过scanf获得了一个程序过滤输入。 我想要只读数字和大字母+空格。

最近我试图做这样的事情,它陷入无限循环,仍然只打印第一个输入。 我知道fgets() ,但我知道这很有用。 我无法找出问题所在。 这是简化的情况; 我是怎么了?

 #include  #include  int main() { char str[21]; do { scanf("%20[0-9A-Z ]", str); printf("%sn", str); } while(strcmp("END", str) != 0); return 0; } 

编辑:我忘了提,输入有效,输入:“HELLO”程序卡住…而scanf仅返回1为第一次输入,其他返回0。我也尝试fflush(stdin) ,阅读后…

    您的scanf只接受数字,大写字母(拉丁字母)和空格,

     scanf("%20[0-9A-Z ]", str); 

    因此,当您输入任何其他内容时, scanf无法将输入分配给str ,并且有问题的输入仍保留在输入缓冲区中。 您需要检查扫描是否成功并在失败时清除输入缓冲区。

    并且由于特别是新行不在有效输入令牌中,因此如果输入来自例如键盘而不是无换行输入流,则需要清除输入缓冲区直到下一个换行符。

     int c; do { scanf("%20[0-9A-Z ]", str); printf("%sn", str); while((c = getchar()) != 'n' && c != EOF); // clear input buffer } while(c != EOF && strcmp("END", str) != 0); 

    取决于输入 – 但你可以检查scanf是否工作 – 它将返回匹配表达式的数量 – 所以在这种情况下应该是1。 如果它的0 – 它与输入不匹配,那么它可能会粘在它的位置。

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

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

      ctvol管理联系方式QQ:251552304

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

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

      精彩推荐