在C中if-else的顺序

时间:2013-07-11 13:13:08

标签: c turbo-c

我使用以下逻辑来测试三角形是等腰,等边,斜角或直角。

if (side1 == side2 || side2 == side3 || side1 == side3)
    printf("Isosceles triangle.");
else if (side1 == side2 && side2 == side3 && side3 == side1)
    printf("equilateral triangle");

我将侧面3 3 3的输出视为等腰而不是等边但是当我交换写等边逻辑的逻辑时,我得到等边。我无法理解发生了什么?

5 个答案:

答案 0 :(得分:4)

在这种情况下,您不应使用else

代码:

if (condition)
     code
else if (condition2)
     code2

检查条件是否为真。如果是这样,它执行代码。 仅当 condition 为false时,才会选中 condition2 ,并且 code2 可以执行。

答案 1 :(得分:3)

只有在第一个if为假时,您的代码才会“检查”第二个if 逻辑上第二个if只有在第一个if为真时才可以为真......

我会将代码更改为:

if (side1 == side2 || side2 == side3 || side1 == side3)
{
    printf("Isosceles triangle.");
    if (side1 == side2 && side2 == side3 && side3 == side1)
        printf("equilateral triangle");
}

答案 2 :(得分:2)

仅当else未执行时才执行

if。只需删除else,就可以在这种情况下打印两个语句。

答案 3 :(得分:2)

Side1 = 3,side2 = 3,side = 3,这意味着side1 == side2为真。这就是你的程序打印出“Iosceles”的原因。首先如果是真的,第二个不会被检查。只有当第一个是假的时候才会这样。

答案 4 :(得分:1)

只需切换if语句的顺序即可。因为每个等边三角形都是等腰,所以你永远不会把它变成其他的。让您的代码如下所示:

if (side1 == side2 && side2 == side3 && side3 == side1)
    printf("Equilateral triangle");
else if (side1 == side2 || side2 == side3 || side1 == side3)
    printf("Isosceles triangle.");

或者,如果你想要打印两个结果,你可以将等边if块嵌套在等腰中if if block

if (side1 == side2 || side2 == side3 || side1 == side3){
    if (side1 == side2 && side2 == side3 && side3 == side1){
        printf("Equilateral triangle");
    }
    printf("Isosceles triangle.");
}

要考虑的另一个优化是您的等边检查只需要两次检查均衡。即:

(side1 == side2 && side2 == side3) => (side1 == side3)

因此,if语句可以这样读:

if (side1 == side2 && side2 == side3)