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

C语言中char变量Gr无法输出?多函数编程问题求助

问题分析与解决方案

核心问题1:fnComputeGrade函数逻辑错误

你在fnComputeGrade里误用了相等比较运算符==而非赋值运算符=,导致Gr指针指向的变量从未被赋值为对应的等级字符,函数返回的只是比较结果(0或1,对应不可见的ASCII控制字符),所以输出时看不到等级。

错误代码片段:

if (Ts >= 80)
return (*Gr == 'A'); // 此处是比较操作,未给Gr赋值

正确写法:先给*Gr赋值,再返回符合函数设计的浮点值:

if (Ts >= 80) {
    *Gr = 'A';
    return Ts;
}

核心问题2:main函数中函数调用的语法错误

调用fnPrintAll和fnPrintMatrixGrade时,错误地写了**Gr**,这两个函数的参数是char类型,直接传入变量Gr即可。

错误调用:

fnPrintAll(Mx, Ts, **Gr**);
fnPrintMatrixGrade (Mx, **Gr**);

正确调用:

fnPrintAll(Mx, Ts, Gr);
fnPrintMatrixGrade(Mx, Gr);

修正后的完整代码

#include <stdio.h>
void fnInput (long int*, float*, float*, float*);
float fnSumMarks (float, float, float, float*);
float fnComputeGrade (float, char*); 
void fnPrintAll (long int, float, char);
void fnPrintMatrixGrade (long int, char);

void fnInput (long int*Mx, float*T1, float*T2, float*Tf)
{
    printf("Enter your matrix number:");
    scanf("%ld", Mx);
    printf("\nEnter your marks for Test 1(/25):");
    scanf("%f", T1);
    printf("\nEnter your marks for Test 2(/25):");
    scanf("%f", T2);
    printf("\nEnter your marks for Final Test(/50):");
    scanf("%f", Tf);
}

float fnSumMarks(float T1, float T2, float Tf, float*Ts)
{
    *Ts = T1 + T2 + Tf;
    return(*Ts); 
}

float fnComputeGrade (float Ts, char*Gr) 
{
    if (Ts >= 80)
        *Gr = 'A';
    else if (Ts >= 65)
        *Gr = 'B';
    else if (Ts >= 50)
        *Gr = 'C';
    else if (Ts >= 40)
        *Gr = 'D';
    else if (Ts >= 25)
        *Gr = 'E';
    else
        *Gr = 'F';
    return Ts;
}

void fnPrintAll(long int Mx, float Ts, char Gr)
{
    printf("\nTotal marks for %ld is %f and the grade is %c", Mx, Ts, Gr);
}

void fnPrintMatrixGrade(long int Mx, char Gr)
{
    printf("\nMatrix No.: %ld\nGrade: %c", Mx, Gr);
}

int main(void)
{
    float T1, T2, Tf, Ts;
    long int Mx;
    char Gr;
    fnInput(&Mx, &T1, &T2, &Tf);
    fnSumMarks(T1, T2, Tf, &Ts);
    fnComputeGrade(Ts, &Gr);
    fnPrintAll(Mx, Ts, Gr);
    fnPrintMatrixGrade(Mx, Gr);
    return 0;
}

测试输出

输入你提供的测试数据后,输出会变为:

Enter your matrix number:222123223
Enter your marks for Test 1(/25):22
Enter your marks for Test 2(/25):23
Enter your marks for Final Test(/50):46

Total marks for 222123223 is 91.000000 and the grade is A
Matrix No.: 222123223
Grade: A

内容的提问来源于stack exchange,提问作者KAUSHAL SINGH AL CHAMKOR SINGH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:00:39