繁体   English   中英

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

[英]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 > bc > 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM