如何用fputs实现非整数输入时循环提示重输而非终止程序
考核结果统计程序修改:实现非整数输入时循环重试需求
原代码存在多处关键问题,无法满足输入错误时循环重试的需求,以下是修改后的完整代码及核心说明:
修改后的代码
#include <stdio.h> #include <ctype.h> int main(void) { int test_result; int pass = 0; int fail = 0; int invalid = 0; for (int trainee_total = 0; trainee_total < 6; trainee_total++) { printf("Enter Result (Pass=1 Fail=2) :"); // 循环读取直到获取有效整数输入 while (scanf("%d", &test_result) != 1) { fputs("Wrong input! Please enter an integer (1 for pass, 2 for fail).\n", stderr); // 清空输入缓冲区的无效字符,避免后续scanf重复读取错误数据 int c; while ((c = getchar()) != '\n' && c != EOF) { // 跳过所有非换行的无效字符 } } // 判断输入值是否符合要求 if (test_result == 1) { pass++; } else if (test_result == 2) { fail++; } else { invalid++; fputs("Invalid value! Please enter 1 or 2.\n", stderr); } } printf("The number of participants that passed is : %d\n", pass); printf("The number of participants that failed is : %d\n", fail); printf("Invalid input is : %d\n", invalid); return 0; }
核心修改点
- 初始化计数变量:将
pass、fail、invalid初始化为0,避免使用未定义的内存值导致统计结果混乱 - 修复循环初始化:给
for循环的trainee_total设初始值0,确保循环稳定执行6次 - 循环处理输入错误:把原有的单次
scanf判断改为while循环,当读取非整数失败时,不终止程序,而是持续提示并等待正确输入 - 清理输入缓冲区:当
scanf读取失败后,用getchar()逐个清空缓冲区的无效字符直到换行,避免后续scanf一直读取错误数据陷入死循环 - 区分错误类型:分别处理「非整数输入」和「整数但不在1/2范围内」的情况,给出更明确的错误提示
- 移除终止程序的return:删除原代码中输入错误时的
return 1,保证程序持续运行直到获取正确输入
内容的提问来源于stack exchange,提问作者Cadefr6554
相关产品推荐
相关产品推荐

