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

