C语言输入验证函数异常:无论输入值大小均提示无效输入
问题分析与修正方案
你的代码存在两个核心错误,导致无论输入值是否合规都会触发"INVALID INPUT"提示:
1. 条件判断误用赋值运算符
你写的 if(checkInput = 1) 是赋值操作而非比较操作:它会把1赋值给checkInput,这个表达式的结果永远为1(非零),因此条件永远成立,必然执行错误提示。
需要改为比较相等的运算符 ==:
if(checkInput == 1)
2. 数组索引越界
你定义的 obe_Task[3] 是长度为3的数组,合法索引为0、1、2,但循环中loop_obeTask从1遍历到3,当loop_obeTask=3时,obe_Task[3]超出了数组的内存范围,会引发未定义行为(可能破坏其他变量的值)。
修正循环逻辑,让索引从0开始,输出序号时用loop_obeTask+1来显示OBE1/2/3:
for(loop_obeTask = 0 ; loop_obeTask < 3 ; loop_obeTask++) { printf("OBE%d : ", loop_obeTask + 1); scanf("%lf", &obe_Task[loop_obeTask]); // ... 后续逻辑 }
修正后的完整代码
#include <stdio.h> double invalidInput(double); int main() { int loop_obeTask; double obe_Task[3]; double checkInput; for(loop_obeTask = 0 ; loop_obeTask < 3 ; loop_obeTask++) { printf("OBE%d : ", loop_obeTask + 1); scanf("%lf", &obe_Task[loop_obeTask]); checkInput = invalidInput(obe_Task[loop_obeTask]); if(checkInput == 1) { printf("INVALID INPUT\n"); break; } } return 0; } double invalidInput(double inputGrade) { double indicator; if(inputGrade > 100) { indicator = 1; } else{ indicator = 0; } return indicator; }
额外优化建议
invalidInput函数仅返回0或1的标识,用int类型更合适,可简化为:
int invalidInput(double inputGrade) { return inputGrade > 100 ? 1 : 0; }
内容的提问来源于stack exchange,提问作者JHO
相关产品推荐
相关产品推荐

