if-else语句的c-else部分不起作用



我只是想写一些嵌套的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.但是如果我使用&amp,语句的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");

您的ifs/else并非详尽无遗。例如,如果a > bc > a没有被覆盖:在if (a>b)中,您只考虑if (a > c),如果这个条件为false,则您什么都不做(意味着没有其他(。

您似乎认为最终的else(打印"c is greatest"(应该在每个没有elseif之后执行。然而,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)的内部。

此外,你永远不会认为某些或所有的数字都是相等的。如果没有更广泛的背景,我们不知道这是否会发生,但如果它能发生,那么你可能应该考虑到这种情况。

最新更新