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 也应该解释这一点。
正如标题所说,它只输出第一个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 也应该解释这一点。