条件 Returns 即使不是也为真

Condition Returns True even if it isn't

所以我正在编写一个 C 程序来检查三角形是不等边三角形、等腰三角形还是等边三角形。 但是每当我将三个边等同为不相等时,它仍然是 returns 1(参见第 16 行的条件)。

// Write a C program to check whether the triangle is equilateral, isosceles or scalene triangle
#include <stdio.h>

int main()
{
    int side1, side2, side3;
    printf("Enter side 1: ");
    scanf("%d", &side1);
    printf("Enter side 2: ");
    scanf("%d", &side2);
    printf("Enter side 3: ");
    scanf("%d", &side3);
    if (((side1+side2)>side3)&&((side2+side3)>side1)&&((side1+side3)>side2))
    {
        if (side1!=side2!=side3)
        {
            printf("%d\n", side1!=side2!=side3);
            if ((side1==side2)||(side1==side3)||(side2==side3))
            {
                printf("Triangle is isosceles!");
            }
            else
            {
                printf("Triangle is scalene!");
            }
        }
        else
        {
            printf("Triangle is equilateral!");
        }    
    }
    else
    {
        printf("Input sides doesn't make a triangle!");
    }
    printf("\n");
}

karthik@cosmic:~/.../Binaries (compiled on Linux)$ ./scalene\ equilateral\ or\ isosceles 
Enter side 1: 34
Enter side 2: 34
Enter side 3: 34
1
Triangle is isosceles!

我不明白为什么要打印“1”或者为什么该行循环有效。 有人请帮助我!

你正在打印你在 if 条件中使用的相同表达式,所以如果 if 表达式是 true,它显然会打印 1..

    if (side1!=side2!=side3)
    {
        //If you got here, then side1!=side2!=side3 returns 1.
        printf("%d\n", side1!=side2!=side3);

此外,side1 != side2 将 return 10。然后检查 (1 or 0) != side3 是否可能为真,以及 return 1. 如果启用警告,编译器可能会抛出警告..

你可能想要side1 != side2 && side1 != side3 && side2 != side3