Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

c if-else only returning first statement

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

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading