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

C语言while循环中scanf输入验证引发无限循环无法输入问题求助

解决scanf输入非整数导致的无限循环问题

你的代码出现无限循环的核心原因是:当输入字母、符号这类非整数内容时,scanf("%i")无法匹配有效整数,返回值不为1,且输入缓冲区里的无效字符会被保留。后续循环中的scanf会反复读取这些残留的无效字符,永远无法匹配成功,因此陷入无限循环。

要解决这个问题,每次scanf匹配失败后,必须清空输入缓冲区里的所有无效字符,直到读取到换行符(用户输入的回车),这样下一次scanf才能正常接收新的输入。

修改后的代码如下:

#include <stdio.h>

int main() {
    int num0;
    int num1;

    printf("Please enter your First number: \n");
    while (scanf("%i", &num0) != 1) {
        printf("Error Please enter a valid Number: \n");
        // 清空输入缓冲区的无效字符,直到遇到换行符
        while (getchar() != '\n');
    }

    printf("Please enter your Second number: \n");
    while (scanf("%i", &num1) != 1) {
        printf("Error Please enter a valid Number: \n");
        // 清空输入缓冲区的无效字符,直到遇到换行符
        while (getchar() != '\n');
    }

    // 可在此添加对num0和num1的后续处理逻辑
    return 0;
}

补充说明:

  • 内层while (getchar() != '\n')会逐个读取输入缓冲区里的字符,直到读到换行符为止,彻底清空残留的无效内容。
  • 必须包含stdio.h头文件,getchar()和scanf()都依赖该头文件提供支持。

内容的提问来源于stack exchange,提问作者Ewan Cook

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:11:39