簡體   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