为何该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
相关产品推荐
相关产品推荐

