【发布时间】:2025-12-20 22:45:16
【问题描述】:
我一直在努力处理一个调用返回字符串的函数的程序。我得到了一些似乎可行的想法,但程序仍然崩溃。这是部分代码。
printf("CSC 1100 %d %s %f %s\n ",fm_csc_1100[i] ,grades(fm_csc_1100[i]),gradepoint(fm_csc_1100[i]),course_comment(gradepoint(fm_csc_1100[i])) );
printf("CSK 1101 %d %s %f %s\n ",fm_csk_1101[i] ,grades(fm_csk_1101[i]),gradepoint(fm_csk_1101[i]),course_comment(gradepoint(fm_csk_1101[i])) );
程序使用 for 循环来显示学生的分数。标记已在程序的早期部分输入。该函数调用工作正常,它显示第一行 printf ,然后崩溃。返回字符串的函数是成绩和课程评论。这里有代码。
char *grades(int z)
{ char *temp3 = "A+";
char *temp4 = "A";
char *temp5 = "B+";
char *temp6 = "B";
char *temp7 = "C+";
char *temp8 = "C";
char *temp9 = "D+";
char *temp10 = "D";
char *temp11 = "E";
char *temp12 = "E-";
char *temp13 = "F";
if(z >= 90)
return temp3;
else if (z >= 80 && z<=89)
return temp4;
else if (z >= 75 && z<=79)
return temp5;
else if (z >= 70 && z<=74)
return temp6;
else if (z >= 65 && z<=69)
return temp7;
else if (z >= 60 && z<=64)
return temp8;
else if (z >= 55 && z<=59)
return temp9;
else if (z >= 50 && z<=54)
return temp10;
else if (z >= 45 && z<=49)
return temp11;
else if (z >= 40 && z<=44)
return temp12;
else
return temp13;
}
成绩很乱,但我没有更好的办法。
char *course_comment(float b)
{ char *temp ="Retake";
if(b < 2.0)
return temp;
}
我在程序的后半部分调用的另一个函数,虽然它没有到达那里,因为它崩溃了。
char *student_comment(float c)
{
char *temp1 = "Progress";
char *temp2 ="Stay Put" ;
if (c > 2.0)
return temp1;
else
return temp2;
}
所有这些返回字符串和程序编译和运行正常但崩溃。如何正确处理这些函数?
【问题讨论】:
-
你之前问过几乎同样的问题:*.com/questions/4958758/…
-
您不需要临时变量。只需写'return "A+"'
-
在成绩中,您不需要指定低于 X 的成绩,因为程序的流程只会处理低于前一个成绩下限的条件。
-
顺便说一句,不要将变量命名为
temp,因为这不会增加可读性(例如temp1)。更好的名称可能是“grade_A_text”或“progress_text”。有时不需要变量:if (c > 2.0) return "Progress"; else return "Stay Put";