我只能调用一次函数来使用指针比较2个数字

时间:2017-10-28 04:54:53

标签: c pointers function-pointers

我必须使用指针比较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);

 }

6 个答案:

答案 0 :(得分:2)

让我们从getNumbers()开始:
要使函数返回多个值,可以通过引用传递参数。 This post对通过引用传递参数有很好的解释。

  

当我们传递值时,我们将变量的副本传递给函数。当我们传递引用时,我们将变量的别名传递给函数。

别名是指向num中声明的num2main()的内存位置的指针(参见下面的函数)。这允许您在传递变量的函数内更改它们的值。

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)

bie jiao yin yu。<​​/ p>

你的功能&#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);
   }
}