我必须使用指针比较2个数字,但我只能调用我的函数一次得到数字然后我必须找到2中最大的数字。然后我必须显示哪一个是最大的。我有一个艰难时期因为我不知道我去哪里错了,因为当我首先输入较大的数字时,它总是说的第二个数字更大。有人可以帮忙吗?这是我试过的。
#include <stdio.h>
void getnumbers(float*,float*);
float findlargest(float*,float*);
void displaylargest(float);
int main ()
{
float num;
float num2;
float largest;
getnumbers(&num,&num2);
largest=findlargest(&num,&num2);
displaylargest(largest);
return 0;
}
void getnumbers(float*num,float*num2)
{
printf("Enter a number\n");
scanf("%f",num);
printf("Enter a number\n");
scanf("%f",num2);
}
float findlargest(float*numptr,float*num2ptr)
{
if (*numptr>*num2ptr) {
return *numptr;
}
else {
return *num2ptr;
}
}
void displaylargest(float largest)
{
printf("\nthe largest is %f ",largest);
}
答案 0 :(得分:2)
让我们从getNumbers()
开始:
要使函数返回多个值,可以通过引用传递参数。 This post对通过引用传递参数有很好的解释。
当我们传递值时,我们将变量的副本传递给函数。当我们传递引用时,我们将变量的别名传递给函数。
别名是指向num
中声明的num2
或main()
的内存位置的指针(参见下面的函数)。这允许您在传递变量的函数内更改它们的值。
void getnumbers(float *num, float *num2)//pass by ref to get two numbers
{
printf("Enter a number\n");
scanf("%f",num);//"%2f" is not something you would do
printf("Enter a number\n");
scanf("%f",num2);//assign to num2, not num
}
现在findLargest()
实际上不需要将指针作为参数,但如果赋值需要,它可以。如果您打算更改他们的价值,您只会这样做。如果您只需使用该值,则只需按值传递:
//much more concise and does the exact same thing!
//Normally wouldn't use pointers here, but it is a requirement for the assignment
float findlargest(float *num, float *num2)
{
return *num > *num2 ? *num : *num2;
}
现在你的主要成为:
int main ()
{
float num = 0;//always a good idea to initialize variables!
float num2 = 0;
float largest = 0;
getnumbers(&num, &num2);//pass by reference
largest = findlargest(&num, &num2);//pass by value
displaylargest(largest);
return 0;
}
答案 1 :(得分:1)
我相信这是因为您使用相同的变量来输入数字
即num 2没有值
void getNumbers(float *num1, float *num2){
printf("Enter a number\n");
scanf("%2f", num1);
printf("Enter a number\n");
scanf("%2f", num2);
}
这通过“按引用调用”传递num1和num2变量,并允许您直接修改存储在指针num1和num2中的值,因此您不必返回任何值。
然后当你进行比较时,它应该比较你现在输入的两个值。
答案 2 :(得分:0)
您永远不会在main中分配num2
。您的getnumbers
函数会向用户询问两个数字,并仅返回其中一个数字。我不知道为什么你必须使用你的getlargest
函数的指针 - 这没有任何意义 - 但如果这些是你的要求,那么没关系。
要解决您的问题,请重写getnumbers
以获取指向float
的两个指针,然后转到scanf
。
答案 3 :(得分:0)
num2 中的 main()功能未分配,因为初始 num2 为 0 ,所以你得到的结果总是 num2 最小的。
您的 getnumbers()也有错误,它只能返回最后一个键盘输入值。
答案 4 :(得分:0)
你的功能&#34; getnumbers&#34;只返回一个值,num2未初始化。
有2个解决方案:
(1)添加
num2 = getnumbers();
并删除
printf("Enter a number\n");
scanf("%2f",&num);
(2)修改你的功能
getnumbers(&num, &num2);
void getnumbers(float *num1,float *num2) {
printf("Enter a number\n");
scanf("%f",num1);
printf("Enter a number\n");
scanf("%f",num2);
}
答案 5 :(得分:-2)
#include <stdio.h>
float findLargest(float *,float *);
int main()
{
float *ptr_0, *ptr_1, num_1, num_2;
float result;
printf("Enter Number 1 in x.xxx\n");
scanf("%f", &num_1);
printf("Enter Number 2 in x.xxx\n");
scanf("%f", &num_2);
ptr_0 = &num_1;
ptr_1 = &num_2;
result = findLargest(ptr_0, ptr_1);
printf("%.3f is a larger floating number",result);
}
float findLargest(float *no_1, float *no_2)
{
if(*(no_1)>*(no_2))
{
`return *(no_1);
}
else
{
return *(no_2);
}
}