1

Like the title says, it only output the first if statement. I had tried making the include format generalAverage < 97 && generalAverage >94 and adding .00 to the conditions but nothing worked.

#include<stdio.h>

char remarks[7][20] = {"Excellent", "Very Good", "Good", "Satisfactory", "Fair", "Passed", "Failed"}, opt;
float prelim, midterm, final, generalAverage, equivalent;

int main(){
    do {
        printf("STUDENT GRADE CALCULATOR\n");
        printf("      Enter the Prelim Grade        :   ");
        scanf(" %f", &prelim);
        printf("      Enter the Midterm Grade       :   ");
        scanf(" %f", &midterm);
        printf("      Enter the Final Grade     :   ");
        scanf(" %f", &final);
        printf("\n");
        
        generalAverage = (prelim + midterm + final) / 3;
        
        if (generalAverage > 96) {
            printf("     The General Average is     :   %.2f\n", generalAverage);
            printf("     Equivalent             :   1.0\n");
            printf("     Remarks                :   %s\n", remarks[0]);
        }
        else if (generalAverage < 97) {
            printf("     The General Average is     :   %.2f\n", generalAverage);
            printf("     Equivalent             :   1.25\n");
            printf("     Remarks                :   %s\n", remarks[0]);
        }
        else if (generalAverage < 94) {
            printf("     The General Average is     :   %.2f\n", generalAverage);
            printf("     Equivalent             :   1.50\n");
            printf("     Remarks                :   %s\n", remarks[1]);
        }
        else if (generalAverage < 89) {
            printf("     The General Average is     :   %.2f\n", generalAverage);
            printf("     Equivalent             :   1.75\n");
            printf("     Remarks                :   %s\n", remarks[1]);
        }
        else if (generalAverage < 88) {
            printf("     The General Average is     :   %.2f\n", generalAverage);
            printf("     Equivalent             :   2.00\n");
            printf("     Remarks                :   %s\n", remarks[2]);
        }
        else if (generalAverage < 85) {
            printf("     The General Average is     :   %.2f\n", generalAverage);
            printf("     Equivalent             :   2.25\n");
            printf("     Remarks                :   %s\n", remarks[2]);
        }
        else if (generalAverage < 82) {
            printf("     The General Average is     :   %.2f\n", generalAverage);
            printf("     Equivalent             :   2.50\n");
            printf("     Remarks                :   %s\n", remarks[3]);
        }
        else if (generalAverage < 77) {
            printf("     The General Average is     :   %.2f\n", generalAverage);
            printf("     Equivalent             :   2.75\n");
            printf("     Remarks                :   %s\n", remarks[4]);
        }
        else if (generalAverage == 75) {
            printf("     The General Average is     :   %.2f\n", generalAverage);
            printf("     Equivalent             :   3.00\n");
            printf("     Remarks                :   %s\n", remarks[5]);
        }
        else if (generalAverage < 75) {
            printf("     The General Average is     :   %.2f\n", generalAverage);
            printf("     Equivalent             :   5.00\n");
            printf("     Remarks                :   %s\n", remarks[6]);
        }
        
        printf("\n");
        printf("Do you want to continue (Type y or n):  ");
        scanf(" %c", &opt);
    }while(opt == 'Y'||opt == 'y');
} 
max1eee -
  • 45
  • 5

3 Answers3

1

You should check from "tight", via "more generous" to "else".

if (generalAverage < 75) {
}
else if  (generalAverage == 75) {
}
else if (generalAverage < 77) {
}
else if (generalAverage < 82) {
}
else if (generalAverage < 85) {
}
else if (generalAverage < 88) {
}
else if (generalAverage < 89) {
}
else if (generalAverage < 94) {
}
else if (generalAverage < 97) {
} else                        {
}

If you start with (or early on have) generous checks like

if (generalAverage < 97)

all the rest is ignored, because of the (otherwise sensible) if-else chain.

I think you also have an unintended overlap in your value mapping for values between 96.0 and 97.0. The two conditions <97 and >96 exhibit "integer thinking". generalAverage is however float, e.g. 96.5 matches both conditions. A final else instead of an else if solves that more neatly than even the pair of <97 and >=97, because of weird floats.
Compare Is floating point math broken?
In case that you observe ==75 not being used even if the values in your opinion would call for that branch, that "broken float" link also should explain that.

Yunnosch
  • 26,130
  • 9
  • 42
  • 54
0

First if{} and second else if{ }block considers all the cases.

  • 2
    I think you mean the first (not the second) else-if. – Yunnosch Mar 02 '22 at 07:50
  • 2
    As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Mar 02 '22 at 12:24
0

Your else if are in the wrong order.

if the generalAverage is 80 it will always go into the first else if becourse its < 97.

just start with the smalest and work your way up.