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

C语言如何防止用户输入超过要求数量的整数,多输入即报错?

问题根因

你现有代码的问题在于scanf("%d %d")只会尝试读取两个整数,只要成功读取到2个就会返回2,不会校验后续是否还有多余的有效输入内容,所以多输入的场景会被直接忽略。


解决思路

读取完两个整数后,额外检查输入流中剩余的内容:如果剩余的只有空白字符(空格、换行、制表符等),说明输入合法;如果还有其他非空白字符,说明存在多余输入,判定为非法。


可直接运行的修改后代码

#include <stdio.h>
#include <ctype.h> // 用于判断字符类型的isspace工具函数

int main() {
    int a, b;
    printf("Enter input:\n");
    int read_cnt = scanf("%d %d", &a, &b);
    
    // 第一层校验:判断是否成功读取到2个整数
    if (read_cnt != 2) {
        printf("Invalid input.\n");
        return 0;
    }
    
    // 第二层校验:检查后续是否有多余的非空白输入
    int c;
    // 逐字符读取剩余内容,直到换行或输入结束
    while ((c = getchar()) != '\n' && c != EOF) {
        // 存在非空白字符即判定为非法输入
        if (!isspace(c)) {
            printf("Invalid input.\n");
            return 0;
        }
    }
    
    // 所有校验通过
    printf("First: %d Second: %d\n", a, b);
    return 0;
}

代码效果验证

  • 输入1 2:读取完两个数后剩余内容只有换行,校验通过,输出正常结果
  • 输入1 2 3:读完两个数后仍能读到非空白的3,触发非法提示
  • 输入1 a 2:scanf仅能读取到1个有效整数,触发第一层非法判断
  • 输入 123 456 (前后带空格):空白字符会被正常忽略,判定为合法输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:06:03