Switch语句中的浮点数据类型

时间:2017-10-23 19:48:23

标签: c visual-studio function switch-statement

我正在为一个更大的程序创建一个函数,该函数将获取一个字母等级,该字母等级被输入并存储在程序中其他位置的数组中,然后为该字母等级指定一个等级点(即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;
}

2 个答案:

答案 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函数。