繁体   English   中英

从 If 语句切换到 Switch 语句

[英]Switch from If Statement to a Switch Statement

是否有任何信息或示例可以帮助我将代码流从使用 If 语句更改为 switch-case 语句?

#include <stdio.h>

int main(void){
    double averageGrade;

    printf("\nThe average grade is:");
    scanf("%1f", &averageGrade);

    // output appropriate message for average grade
    if (averageGrade > 3.5) {
        printf("Average grade is A");
    }
    else if(averageGrade > 2.5) {
        printf("Average grade is B");
    }
    else if (averageGrade > 1.5) {
        printf("Average grade is C");
        }
    else if (averageGrade > 0.5) {
        printf("Average grade is D");
    }
    else {
        printf("Average grade is F");
    }
    return 0;
}

建议既不使用if-else if语句链也不使用switch语句。

以下代码将很好地实现这些要求。

#include <stdio.h>
#include <stdlib.h>

struct grades
{
    double avgGrade;
    char  letGrade;
};

int main(void)
{
    double testAverageGrade;

    printf("\nEnter the average grade: ");
    if( scanf("%lf", &testAverageGrade) != 1 )
    {
        fprintf( stderr, "scanf for average grade failed\n" );
        exit( EXIT_FAILURE );
    }

    // implied else, scanf successful


    struct grades gradesTbl[] =
    {
        {  3.5, 'A' },
        {  2.5, 'B' },
        {  1.5, 'C' },
        {  0.5, 'D' },
        {  0.0, 'F' },
    };

    size_t numGrades = sizeof( gradesTbl ) / sizeof( gradesTbl[1] );

    for( size_t i=0; i<numGrades; i++ )
    {
        if( testAverageGrade > gradesTbl[i].avgGrade )
        {
            printf("Average grade is %c\n", gradesTbl[i].letGrade);
            break;
        }
    }
}

您的情况没有特殊信息,但您可以执行以下操作:

int iGrade = (int) floor(averageGrade - 0.5)
if(iGrade > 3) {
    iGrade = 3
}

switch(iGrade) {
    case 3:
       // code for A
       break;
    case 2:
       // code for B
       break;
    case 1:
       // code for C
       break;
    case 0:
       // code for D
       break;
    default:
       // code for F
       break;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM