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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:15:44