鱼C论坛

 找回密码
 立即注册
查看: 1010|回复: 2

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

[复制链接]
发表于 2023-10-22 20:43:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;
        }       
最佳答案
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;}
希望能够帮到你!

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;}
希望能够帮到你!

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}

这样修改后,无论输入什么值,程序都能正确判断三个数的相等关系。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 19:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表