我使用以下逻辑来测试三角形是等腰,等边,斜角或直角。
if (side1 == side2 || side2 == side3 || side1 == side3)
printf("Isosceles triangle.");
else if (side1 == side2 && side2 == side3 && side3 == side1)
printf("equilateral triangle");
我将侧面3 3 3的输出视为等腰而不是等边但是当我交换写等边逻辑的逻辑时,我得到等边。我无法理解发生了什么?
答案 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)