【问题标题】:How to make right function?如何做出正确的功能?
【发布时间】:2021-06-04 07:46:39
【问题描述】:
#include<stdio.h>
int CompareNumber(int n1,int n2,int n3 )
{
    int a = (n1 < n2) ? n2 : n1;
    int b = (a < n3) ? n3 : a;
    int c = (n1 > n2) ? n2 : n1;
    int d = (c > n3) ? n3 : c;
    printf("biggest %d smallest %d", a, d);
    return 0;
}
int main(void)
{
    int a, b, c;
    scanf_s("%d,%d,%d", &a, &b, &c);
    CompareNumber(a, b, c);
    return 0;
}

当我输入 5,6,7 时,这段代码打印出 5 表示最大的数字,而一些无意义的数字表示最小的数字

【问题讨论】:

  • 更好的变量名会有所帮助——最大的数字是b,而不是a。您是否在输入中输入了逗号并验证了输入是否正确读取,可能是通过回显输入?
  • b 已定义但未在 CompareNumber 中使用。显示你得到的确切输出。
  • omg 非常感谢我没有输入逗号...

标签: c max min conditional-operator function-definition


【解决方案1】:

更改此语句

printf("biggest %d smallest %d", a, d);

printf("biggest %d smallest %d", b, d);

因为最大值存储在变量b中。

还有这个电话

scanf_s("%d,%d,%d", &a, &b, &c);

要求用户也输入逗号。改成

scanf_s("%d %d %d", &a, &b, &c);

注意使用无意义的变量全名如 a、b、c、d 会使代码不可读。函数的返回类型也没有意义。

函数可以通过以下方式声明和定义

void CompareNumber( int n1, int n2, int n3 )
{
    int max = ( n1 < n2 ) ? n2 : n1;
    max = ( max < n3 ) ? n3 : max;
    
    int min = ( n2 < n1) ? n2 : n1;
    min = ( n3 < min ) ? n3 : min;
    
    printf( "biggest %d smallest %d", max, min );
}

当函数做一件事时更好:确定最小值和最大值并将它们返回给调用者,然后是调用者输出结果。

这是一个演示程序。

#include<stdio.h>

struct Pair
{
    int min;
    int max;
};

struct Pair  CompareNumber( int n1, int n2, int n3 )
{
    struct Pair p = { n2 < n1 ? n2 : n1, n1 < n2 ? n2 : n1 };
    
    p.min = n3 < p.min ? n3 : p.min;
    p.max = p.max < n3 ? n3 : p.max;
    
    return p;    
}

int main(void)
{
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
 
    struct Pair p = CompareNumber( a , b,  c );
    
    printf( "biggest %d smallest %d", p.max, p.min );

    return 0;
}

它的输出可能看起来像

biggest 7 smallest 5

【讨论】:

    【解决方案2】:

    您没有将a 与第三个变量进行比较。这是CompareNumber 的更简单表示:

    int CompareNumber(int n1,int n2,int n3 )
    {
        int a = (n1 < n2) ? n2 : n1;
        a = (a < n3) ? n3 : a;
    
        int d = (n1 < n2) ? n1 : n2;
        d = (d < n3) ? d : n3;
    
        printf("biggest %d smallest %d", a, d);
        return 0;
    }
    

    您的main 函数应该按照其他帖子中的建议进行修复。

    ...这里有一个更好的(对我来说)替代方案:

    int max (int a, int b)
    {
        return (a > b) ? a : b;
    }
    
    int min (int a, int b)
    {
        return (a > b) ? b : a;
    }
    
    int CompareNumber(int n1,int n2,int n3 )
    {
        int a = max (max (n1, n2), n3);
        int d = min (min (n1, n2), n3);
    
        printf("biggest %d smallest %d", a, d);
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多