1215787625 发表于 2023-10-22 20:43:01

为什么此此程序在输入1,1,1时可以正常显示“三个数相等”,但其他不行。

#include<stdio.h>
int main()
{
        int a, b, c;
        printf("请输入a的值。\n");
        scanf("%d",&a);
                printf("请输入b的值。\n");
        scanf("%d",&b);
                printf("请输入c的值。\n");
        scanf("%d",&c);
        if (a == b == c)
        printf("三个数相等。");
        else if(a == b || a == c || b == c)
        printf("有两个数相等。");
        else
        printf("三个数都不相等。");
        return 0;
        }       

Mike_python小 发表于 2023-10-22 20:43:25

这是因为运算符的优先级问题导致的,可以将 if 语句改为如下形式即可:


if (a == b && b == c)
    printf("三个数相等。");
else if (a == b || a == c || b == c)
    printf("有两个数相等。");
else
    printf("三个数都不相等。");


在这里,我们使用了逻辑与运算符 &&,它的优先级比相等运算符 == 高。因此,先进行比较 a == b,再比较 b == c。

另外,题目中要求输入三个数,但代码中只有两个输入语句,应该增加一个输入语句。

经过修改后,代码如下:


#include <stdio.h>

int main()
{
    int a, b, c;
    printf("请输入a的值:");
    scanf("%d", &a);
    printf("请输入b的值:");
    scanf("%d", &b);
    printf("请输入c的值:");
    scanf("%d", &c);

    if (a == b && b == c) {
      printf("三个数相等。\n");
    }
    else if (a == b || a == c || b == c) {
      printf("有两个数相等。\n");
    }
    else {
      printf("三个数都不相等。\n");
    }
    return 0;
}


希望能够帮到你!

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-10-22 20:43:38

问题出在 if 语句的条件判断上。在 C 语言中,连续的比较运算符会按照从左到右的顺序进行求值。所以,表达式a == b == c实际上会先计算a == b的结果,然后再将这个结果与c进行比较。

在这个程序中,当输入1,1,1时,首先计算a == b ,结果为1 ,然后再将1与c进行比较。由于c的值也为1 ,所以最终结果为真,输出 "三个数相等"。

然而,当输入其他值时,比如2,2,3 ,首先计算a == b ,结果为1 ,然后将1与c进行比较。由于c的值为3 ,所以最终结果为假,不会输出 "三个数相等"。

解决这个问题的方法是使用逻辑运算符来连接多个比较表达式,而不是连续使用比较运算符。修改后的代码如下:

#include<stdio.h>

int main()
{
    int a, b, c;
    printf("请输入a的值。\n");
    scanf("%d", &a);
    printf("请输入b的值。\n");
    scanf("%d", &b);
    printf("请输入c的值。\n");
    scanf("%d", &c);
   
    if (a == b && b == c)
      printf("三个数相等。");
    else if (a == b || a == c || b == c)
      printf("有两个数相等。");
    else
      printf("三个数都不相等。");
      
    return 0;
}


这样修改后,无论输入什么值,程序都能正确判断三个数的相等关系。
页: [1]
查看完整版本: 为什么此此程序在输入1,1,1时可以正常显示“三个数相等”,但其他不行。