我只能调用一次函数来使用指针比较 2 个数字
i can only call a function once to compare 2 numbers using pointers
我必须使用指针比较 2 个数字,但我只能调用我的函数一次来获取数字,然后我必须从 2 中找到最大的数字。然后我必须显示哪个是 largest.I 我很难过,因为我不知道我哪里错了,因为当我先输入较大的数字时,它总是说第二个数字较大。有人可以帮忙吗?这是我尝试过的。
#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);
}
您永远不会在 main 中分配 num2
。您的 getnumbers
函数要求用户输入两个数字,并且仅 returns 其中一个。我不知道为什么你必须为你的 getlargest
函数使用指针——这没有意义——但如果这些是你的要求,那么没关系。
要解决您的问题,请重写 getnumbers
以接收指向 float
的两个指针,然后您将在其中传递给 scanf
。
#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);
}
}
我相信这是因为您使用相同的变量输入数字
即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 中的值,因此您不必到 return 任何值。
然后当你比较它应该比较你现在输入的两个值。
你的main()函数里面的num2没有赋值,因为初始的num2是0,所以你得到的结果总是num2最小的。
你的getnumbers()也有错误,只能return最后一次键盘输入的值。
别教音语。
你的函数"getnumbers"只有return一个值,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);
}
让我们从 getNumbers()
开始:
要让一个函数获得return多个值,可以通过引用传递参数。 This post 对通过引用传递参数有很好的解释。
When we pass-by-value we are passing a copy of the variable to a function. When we pass-by-reference we are passing an alias of the variable to a function.
其中别名是指向 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;
}
我必须使用指针比较 2 个数字,但我只能调用我的函数一次来获取数字,然后我必须从 2 中找到最大的数字。然后我必须显示哪个是 largest.I 我很难过,因为我不知道我哪里错了,因为当我先输入较大的数字时,它总是说第二个数字较大。有人可以帮忙吗?这是我尝试过的。
#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);
}
您永远不会在 main 中分配 num2
。您的 getnumbers
函数要求用户输入两个数字,并且仅 returns 其中一个。我不知道为什么你必须为你的 getlargest
函数使用指针——这没有意义——但如果这些是你的要求,那么没关系。
要解决您的问题,请重写 getnumbers
以接收指向 float
的两个指针,然后您将在其中传递给 scanf
。
#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);
}
}
我相信这是因为您使用相同的变量输入数字
即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 中的值,因此您不必到 return 任何值。
然后当你比较它应该比较你现在输入的两个值。
你的main()函数里面的num2没有赋值,因为初始的num2是0,所以你得到的结果总是num2最小的。
你的getnumbers()也有错误,只能return最后一次键盘输入的值。
别教音语。
你的函数"getnumbers"只有return一个值,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);
}
让我们从 getNumbers()
开始:
要让一个函数获得return多个值,可以通过引用传递参数。 This post 对通过引用传递参数有很好的解释。
When we pass-by-value we are passing a copy of the variable to a function. When we pass-by-reference we are passing an alias of the variable to a function.
其中别名是指向 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;
}