Zachary.Oliver1
Zachary.Oliver1

Reputation: 23

Switch from If Statement to a Switch Statement

Is there any information or examples I can use to help me change the flow of my code from using If-statements to switch-case statements?

#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;
}

Upvotes: 0

Views: 74

Answers (2)

user3629249
user3629249

Reputation: 16540

suggest using neither the chain of if-else if statements not a switch statement.

The following code would implement the requirements nicely.

#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;
        }
    }
}

Upvotes: 1

Anatoliy R
Anatoliy R

Reputation: 1789

No special information for your case, but you can do something like:

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;
}

Upvotes: 0

Related Questions