如何解决如何做出正确的功能?
#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,c);
return 0;
}
当我输入 5,6,7 时,此代码打印 5 代表最大的数字,而一些无意义的数字代表最小的数字
解决方法
更改此声明
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",&c);
注意使用无意义的变量全名作为 a,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 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,c;
scanf("%d %d %d",&c);
struct Pair p = CompareNumber( a,c );
printf( "biggest %d smallest %d",p.max,p.min );
return 0;
}
它的输出可能看起来像
biggest 7 smallest 5
,
您没有将 a
与第三个变量进行比较。以下是 CompareNumber
的更简单表示:
int CompareNumber(int n1,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",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 n3 )
{
int a = max (max (n1,n2),n3);
int d = min (min (n1,n3);
printf("biggest %d smallest %d",d);
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。