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

为何循环后的average=average/i代码不可达?初始代码曾正常运行

嘿,我来帮你搞明白这个「代码不可达」的问题~

问题根源

你遇到的问题核心,是那个没有终止条件的无限for循环:

for( i=0; ; i++) {
    average=average + testScores[i];
}

在C语言里,for循环的结构是for(初始化; 循环条件; 增量),如果中间的循环条件留空,就表示这个循环永远不会停下来——它会一直重复执行循环体里的代码,永远不会跳出。这样一来,循环后面的average= average/i;以及所有后续的等级判断、return语句,根本没机会被执行到,所以编译器就会提示这行代码「不可达」。

而且这里还有个隐藏的大坑:无限循环会让i不断增大,早晚会超出testScores数组的下标范围,导致数组越界访问,程序运行时很可能直接崩溃,或者出现各种奇怪的错误。

修复方法

你需要给循环加上合理的终止条件,比如你肯定知道testScores数组里有多少个分数吧?假设分数的数量是scoreCount,那循环可以改成这样:

char calculate(){
    int i, average=0;
    int scoreCount = 5; // 这里替换成你实际的分数数量哦
    for( i=0; i < scoreCount; i++) {
        average = average + testScores[i];
    }
    average = average / i;
    char grade='A';
    if(average>=90 && average<=100)
        grade='O';
    else if(average>=80 && average<90)
        grade='A';
    else if(average>=70 && average<80)
        grade='B';
    else if(average>=55 && average<70)
        grade='C';
    else if(average>=40 && average<55)
        grade='D';
    else if(average<40)
        grade='T';
    return grade;
}

如果你的分数列表是用「哨兵值」(比如用-1表示分数结束)来标记的,那换成while循环会更灵活:

char calculate(){
    int i=0, average=0;
    while(testScores[i] != -1) { // 假设-1是分数结束的标记
        average += testScores[i];
        i++;
    }
    // 别忘了处理没有分数的情况,避免除以0的错误!
    if(i == 0) {
        return 'E'; // 这里可以换成你需要的默认等级或错误标记
    }
    average = average / i;
    char grade='A';
    if(average>=90 && average<=100)
        grade='O';
    else if(average>=80 && average<90)
        grade='A';
    else if(average>=70 && average<80)
        grade='B';
    else if(average>=55 && average<70)
        grade='C';
    else if(average>=40 && average<55)
        grade='D';
    else if(average<40)
        grade='T';
    return grade;
}

另外提醒一句:如果没有任何分数被累加(i=0),那average/i会触发除以0的运行时错误,所以一定要加上判断处理这种边界情况哦。

内容的提问来源于stack exchange,提问作者Pragya Kulshresth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:37:48