c if-else 只返回第一个语句

c if-else only returning first statement

正如标题所说,它只输出第一个if语句。我曾尝试制作包含格式 generalAverage < 97 && generalAverage >94 并在条件中添加 .00 但没有任何效果。

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

第一个 if{} 和第二个 else if{ } 块考虑了所有情况。

你的 else if 顺序错误。

如果 generalAverage 是 80,它总是会进入第一个 else 如果它 < 97。

从最小的开始,然后逐步提高。

你应该检查从“紧”,通过“更慷慨”到“其他”。

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 (generalAverage < 97)

所有其余的都被忽略,因为(否则是明智的)if-else 链。

我认为您在 96.0 和 97.0 之间的值映射中也有意外的重叠。 <97>96 这两个条件表现出“整数思维”。 generalAverage 然而是浮动的,例如96.5 符合这两个条件。由于奇怪的浮点数,最后的 else 而不是 else if<97>=97 这对更巧妙地解决了这个问题。
比较 Is floating point math broken?
如果您观察到 ==75 没有被使用,即使您认为的值需要该分支,“损坏的浮动”link 也应该解释这一点。