You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

输入非整数值时C语言代码陷入死循环的原因咨询

输入非整数导致无限循环的原因

核心问题:输入缓冲区的残留字符

用scanf("%d", &a)读取输入时,如果输入的不是整数(比如字母、符号):

  • scanf会读取失败,变量a的值不会被更新,还是之前的旧值或者随机垃圾值
  • 最关键的是,这个输入失败的非整数字符会留在输入缓冲区里,不会被自动清除

接下来循环进入下一轮:

  • 再次调用scanf("%d", &a)时,它会直接读取缓冲区里残留的非整数字符,又一次读取失败,这个过程不断重复,就形成了无限循环

额外的代码问题

  • 代码里的return 0;放在了while(1)循环的else分支之后,永远不会被执行到,属于无效代码
  • number_checker函数是判断整数是否在0-9之间,但如果输入非整数,a根本没被正确赋值,这个判断也毫无意义

内容的提问来源于stack exchange,提问作者Puneet Bajaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:55:02