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

C语言成绩计算程序if else语句不生效直接走else分支求助

C语言成绩计算程序问题修复方案

核心问题梳理

  • 变量作用域错误:getScore函数内定义的score1、score2、score3、Ave都是局部变量,函数执行结束后就会被销毁,calcGrade中定义的同名变量完全没有拿到输入的成绩和计算后的平均分,属于未初始化的随机值,判断逻辑自然无法正常触发。
  • 函数返回值错误:calcScore中的return Ave, Div;是逗号表达式,C语言只会返回最后一个表达式的值也就是平均分Div,且返回值被赋值给了getScore的局部变量Ave,外层函数根本无法获取该结果。
  • 函数调用大小写不匹配:主函数中调用的calcgrade()和预先声明的calcGrade()大小写不同,C语言大小写敏感,会触发编译错误。
  • else分支语法错误:最后一行else(Ave<50);末尾加了分号,相当于else分支是个空语句,后面的打印F的代码不管前面判断条件是否成立都会执行,这是直接输出F的直接原因。

修复方案

调整函数逻辑,用结构体传递多值解决局部变量无法跨函数访问的问题,修正语法错误后完整可运行代码如下:

#include <stdio.h>

// 定义结构体存储三个考试成绩
typedef struct {
    int s1;
    int s2;
    int s3;
} Scores;

Scores getScore();
int calcScore(int a, int b, int c);
void calcGrade();

int main(){
    calcGrade();
    return 0;
}

Scores getScore()
{
     Scores s;
     printf("\t\tENTER TEST SCORES <0-100>\n");
     printf("Enter test score 1:\t");
     scanf("%d", &s.s1);
     printf("Enter test score 2:\t");
     scanf("%d", &s.s2);
     printf("Enter test score 3:\t");
     scanf("%d", &s.s3);
     return s;
}

// 直接返回三科平均分
int calcScore(int a, int b, int c)
{
    return (a + b + c) / 3;
}

void calcGrade()
{
    Scores s = getScore();
    int Ave = calcScore(s.s1, s.s2, s.s3);
    if (Ave>=90)
        printf("\t\t Your Final Grade is: A");
    else if (Ave>=70 && s.s3>=90)
        printf("\t\t Your Final Grade is: A");
    else if (Ave>=70 && s.s3<=89)
        printf("\t\t Your Final Grade is: B");
    else if (Ave>=50 && s.s2>=70 && s.s3>=70)
        printf("\t\t Your Final Grade is: C");
    else if (Ave>50 && s.s2<=69 && s.s3<=69)
        printf("\t\t Your Final Grade is: D");
    else
        printf("\t\t Your Final Grade is: F");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:06:07