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

为何该C语言输入校验函数陷入无限循环?如何修复?

问题原因与修复方案

为什么会无限循环?

当输入非整数(比如字符串)时,scanf("%d", &colQty)无法匹配有效的整数,返回值为0而非1。更关键的是,这些未被匹配的无效输入会留在输入缓冲区中,下一次循环时scanf会直接读取缓冲区里的无效内容,再次匹配失败,如此反复就陷入了无限循环。

怎么修复?

核心是在匹配失败后清空输入缓冲区里的无效内容,让下一次scanf能正常接收新输入。可以用getchar()循环读取缓冲区字符,直到遇到换行符(用户输入的回车)或输入结束符(EOF),避免异常情况。

修改后的代码如下:

#include <stdio.h>

int main(void) {
  int colQty;
  int result = 0;
  while (result != 1) {
    printf("Informe a quantidade de colunas: ");
    result = scanf("%d", &colQty);
    if (result != 1) {
      printf("Erro! Verifique se os valores de entrada estão certos.\n");
      // 清空输入缓冲区的无效内容
      int c;
      while ((c = getchar()) != '\n' && c != EOF);
    }
  }

  return 0;
}

补充说明:

  • 新增的循环会逐个读取缓冲区字符,直到读完换行符或遇到EOF,彻底清空无效输入,确保下一次scanf能等待新输入。
  • 给错误提示加\n是为了避免输出格式混乱,让提示信息单独占一行。

内容的提问来源于stack exchange,提问作者Ramon Jales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:25:56