C语言for循环内嵌if-else失效:输入无效年龄未触发提示
问题分析与解决
你的代码逻辑完全搞反了:if判断的是循环变量i,而不是用户输入的年龄值。循环里的i范围是1到21,必然满足i<=99 && i>=0,所以不管输入什么年龄,永远只会执行输入代码,不会触发错误提示。
修正步骤
- 把判断对象改成输入后的
ages[i] - 增加
scanf返回值校验,处理非数字输入的情况 - 输入无效时,重新获取输入(避免跳过当前循环),同时清理输入缓冲区的垃圾数据
修正后的代码示例:
#include <stdio.h> int main() { int ages[22]; // 数组下标从0开始,i从1到21,数组大小至少需22 for (int i = 1; i < 22; i++) { int input_ok = 0; while (!input_ok) { printf("enter an age: "); // 校验是否成功读取整数 if (scanf("%d", &ages[i]) != 1) { printf("enter a valid number (integer)\n"); // 清理缓冲区的非数字字符 while (getchar() != '\n'); continue; } // 判断年龄是否在有效范围 if (ages[i] >= 0 && ages[i] <= 99) { input_ok = 1; } else { printf("enter a valid number (0-99)\n"); } } } return 0; }
关键说明
- 用
while循环包裹输入逻辑,确保用户输入有效后才进入下一次循环 - 检查
scanf返回值:返回1表示成功读取整数,否则说明输入了非数字,需清理缓冲区后重新输入 - 年龄的有效范围判断必须放在读取输入之后,针对
ages[i]做判断
内容的提问来源于stack exchange,提问作者Dilara Aydogmus
相关产品推荐
相关产品推荐

