我只是想写一些嵌套的if-else
语句,我不知道为什么语句的else
部分没有执行。
void main(){
int a = 1;
int b = 2;
int c = 3;
if(a>b){
if(a>c){
printf("a is greatest");
}
}
else if(b>a){
if(b>c){
printf("b is greatest");
}
}
// This else statement.
else{
printf("c is greatest");
}
}
1.但是如果我使用&,语句的else
部分开始正常工作。
if(a>b && a>c){
printf("a is greatest");
}
else if(b>a && b>c){
printf("b is greatest");
}
else{
printf("c is greatest");
}
2.如果我从else-if
零件中移除支架,则程序工作正常。
if(a>b){
if(a>c){
printf("a is greatest");
}
}
else if(b>a)
if(b>c){
printf("b is greatest");
}
else{
printf("c is greatest");
}
但如果我移除每个Brace,则else
部分不会执行。
if(a>b)
if(a>c)
printf("a is greatest");
else if(b>a)
if(b>c)
printf("b is greatest");
else
printf("c is greatest");
您的if
s/else
并非详尽无遗。例如,如果a > b
和c > a
没有被覆盖:在if (a>b)
中,您只考虑if (a > c)
,如果这个条件为false,则您什么都不做(意味着没有其他(。
您似乎认为最终的else
(打印"c is greatest"
(应该在每个没有else
的if
之后执行。然而,C并不是这样工作的:只有当if
的条件为false时,才会执行该else
。你第一次尝试的固定版本是:
if(a>b){
if(a>c){
printf("a is greatest");
} else{
printf("c is greatest");
}
}
else if(b>a){
if(b>c){
printf("b is greatest");
} else{
printf("c is greatest");
}
}
else{
printf("c is greatest");
}
然而,在我看来,第二个版本(带有&&
(更清晰。
最后,当您删除if(b>a)
(第三个版本(之后的大括号时,最终的else
与它之前的if
相关联,即if(b>c)
而不是if(b>a)
(与存在大括号时不同(。你的缩进有误导性,应该是:
else if(b>a)
if(b>c){
printf("b is greatest");
}
else {
printf("c is greatest");
}
同样的事情也适用于你的第四个版本,应该读作:
if(a>b)
if(a>c)
printf("a is greatest");
else if(b>a)
if(b>c)
printf("b is greatest");
else
printf("c is greatest");
注意if(b>a)
是如何永远不可能为真的,因为它在if(a>b)
的内部。
此外,你永远不会认为某些或所有的数字都是相等的。如果没有更广泛的背景,我们不知道这是否会发生,但如果它能发生,那么你可能应该考虑到这种情况。