我正在为一个更大的程序创建一个函数,该函数将获取一个字母等级,该字母等级被输入并存储在程序中其他位置的数组中,然后为该字母等级指定一个等级点(即A = 4.0,B = 3.0等),稍后将用于另一个函数,根据已存储在另一个数组中的课程小时计算总GPA。
我选择使用切换声明,因为我已经完成了以前编程中的熟悉,但是如果可能的话,我可以采用更好的方法来完成此任务。我得到的当前错误是" switch语句不是整数"。
float GradePoints(char grades[])
{
float points = 0.0;
switch (grades[])
{
case 'A':
points = 4.0;
break;
case 'B':
points = 3.0;
break;
case 'C':
points = 2.0;
break;
case 'D':
points = 1.0;
break;
case 'F':
points = 0.0;
break;
}
return points;
}
答案 0 :(得分:1)
您必须使用字符或整数值。这里 https://gist.github.com/castledoor/05c48bca2db5a67e649f20c95d8d25a6
或类似的东西。
switch(grades[0])
或者,您可以将函数的参数保留为char,然后执行必要的操作: -
float GradePoints(char grades[])
{
float points = 0.0;
int len = sizeof (grades) / sizeof (grades[0]);
for(int i=0;i<len;i++){
switch (grades[i])
{
case 'A':
points+= 4.0;
break;
case 'B':
points+= 3.0;
break;
case 'C':
points+= 2.0;
break;
case 'D':
points+= 1.0;
break;
case 'F':
points+= 0.0;
break;
}
}
return points;
}
另外一件事并非针对任何问题。编写函数时,尝试给出一个有意义的名称。它有助于以后的大项目。
例如,如果您使用我之前显示的功能,则可以将其命名为float GradePoints(char grade)
{
...
swicth(grade)
{
...
}
return point;
}
..
for(int i=0;i<len;i++)
points+=GradePoints(grades[i]);
。
如果您像第二个一样使用,请使用名称calculateTotalGrade(..)
而不是gradePoint()
。这将使您的代码更具可读性。您可以浏览代码并了解正在执行的操作。
答案 1 :(得分:1)
一次处理每个1年级。从以下位置更改您的函数原型:
float GradePoints(char grades[])
到
float GradePoints(char grade)
并将您的switch语句更改为switch(grade)
。然后为您的5个等级中的每个等级循环调用GradePoints
函数。