c# 为什么我的C程序在终端中没有显示任何输出,当我试图在三个给定的年龄中找到最年轻的人的年龄?

q7solyqu  于 2023-06-04  发布在  C#
关注(0)|答案(3)|浏览(424)

终端显示无输出(空白)

// if the ages of 3 people are put telling which one is youngest//

#include<stdio.h>

int main()
{
    int a1,a2,a3;

    printf("enter the age of ram,shyam and ajay");
    scanf("%d,%d,%d",&a1,&a2,&a3);

    if(a1>a2>a3)
        printf("%d,%d,%d",a1,a2,a3);
    if(a3>a2>a1)
        printf("%d,%d,%d",a3,a2,a1);
    if(a2>a1>a3)
        printf("%d,%d,%d",a2,a1,a3);
    if(a2>a3>a1)
        printf("%d,%d,%d",a2,a3,a1);
    if(a1>a3>a2)
        printf("%d,%d,%d",a1,a3,a2);
    if(a3>a1>a2)
        printf("%d,%d,%d",a3,a1,a2);

    return 0;
}

我不确定你是否应该在if语句中写3个表达式,如1>2>3,如果我错了,请纠正我

fivyi3re

fivyi3re1#

是的!伙计,你不能这样使用声明:**if(a1>a2>a3)**你需要像这样写它们if(a1>a2 && a1>a2)还有一件事你需要在这个程序中纠正,你需要检查一次条件,对于一个变量,或者你也可以看一下函数,你可以很容易地做到这一点,而不需要在一些行中写那么多代码,你可以解决它。

sg3maiej

sg3maiej2#

根据C标准(6.5.8关系运算符)
6每个运算符<(小于)、>(大于)、<=(小于或等于)和>=(大于或等于)如果指定的关系为真,则产生1,如果为假,则产生0。结果的类型为int。
并且运算符从左到右求值,
所以如果像这样的陈述

if(a1>a2>a3)

相当于

if( ( a1 > a2 ) > a3 )

根据a1是否大于a2,您有两个

if( ( 1 ) > a3 )

if( ( 0 ) > a3 )

相反,您需要在表达式中包含逻辑AND运算符,如

if( a1 > a2 && a1 > a3 )

但如果你这样做,程序可以输出什么,如果至少有两个年龄相等对方。
scanf的调用中

scanf( "%d,%d,%d", &a1, &a2, &a3 );

最好去掉转换说明符之间的逗号。让用户将输入年龄分隔的空格一样,例如

20 22 21

20
22
21

如果你想按降序输出年龄,你可以写,例如

#include <stdio.h>

int main( void )
{
    int a1, a2, a3;

    printf( "enter the age of ram,shyam and ajay: " );
    scanf( "%d %d %d", &a1, &a2, &a3 );

    if ( a1 < a2 )
    {
        int tmp = a1;
        a1 = a2;
        a2 = tmp;
    }

    if ( a2 < a3 )
    {
        int tmp = a2;
        a2 = a3;
        a3 = tmp;
    }
 
    if ( a1 < a2 )
    {
        int tmp = a1;
        a1 = a2;
        a2 = tmp;
    }

    printf( "%d, %d, %d\n", a1, a2, a3 );
}
czq61nw1

czq61nw13#

那条线

if(a1>a2>a3)

不会做你想做的事根据rules of operator precedence and associativity,该表达式等效于以下内容:

if ( (a1>a2) > a3 )

子表达式(a1>a2)将计算为0(false)或1(true)。因此,整个表达式等效于

if ( 0 > a3 )

或:

if ( 1 > a3 )

您需要的内容如下:

if ( ( a1 > a2 ) && ( a2 > a3 ) )

因为根据上面提到的规则,&&运算符的优先级低于>运算符,所以可以不带括号地写:

if ( a1 > a2 && a2 > a3 )

相关问题