[英]else part of the if else statement is not working
我只是想写一些嵌套的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");
}
但是如果我删除了每个 Braces ,那么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
s 并不详尽。 例如,如果a > b
和c > a
没有被覆盖:在if (a>b)
,你只考虑if (a > c)
,如果这个条件为假,你什么都不做(意思是,没有别的)。
您似乎认为最后的else
(打印"c is greatest"
)应该在每个else
之后执行, if
没有else
。 然而,这不是C是如何工作的:这个else
如果满足条件时,才会执行if
它前面是假的。 因此,您第一次尝试的固定版本是:
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)
的主体内。
此外,您永远不会考虑某些或所有数字可能相等。 如果没有更广泛的背景,我们无法知道这是否会发生,但如果它可能发生,那么您可能应该考虑这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.