Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我只能调用一次函数来使用指针比较两个数字_C_Pointers_Function Pointers - Fatal编程技术网

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

C 我只能调用一次函数来使用指针比较两个数字,c,pointers,function-pointers,C,Pointers,Function Pointers,我必须使用指针比较2个数字,但我只能调用函数一次才能得到数字,然后我必须从2中找到最大的数字。然后我必须显示哪一个是最大的。我有一个困难的时间,因为我不知道我错在哪里了,因为它总是说第二个数字更大,当我输入大的第一个。有人能帮忙吗?这是我试过的 #include <stdio.h> void getnumbers(float*,float*); float findlargest(float*,float*); void displ

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

 }
您从未在main中分配num2。getnumbers函数要求用户输入两个数字,但只返回其中一个。我不知道为什么必须为getMaximum函数使用指针——这毫无意义——但如果这些是您的需求,那就好了


要解决您的问题,请重新编写getnumbers,将两个指针放入浮点,然后传递到scanf。

我相信这是因为您使用的是同一个变量来输入数字 i、 e.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中存储的值,因此不必返回任何值。 然后,当您比较时,它应该比较您现在输入的两个值。

未分配num2中的主函数,因为初始num2为0,所以您得到的结果始终是num2最小

您的getnumbers也有一个错误,它只能返回最后一个键盘输入值。

bie jiao yin yu

函数getnumbers只返回一个值,num2未初始化

有两种解决方案:

1添加 num2=获取数字; 删除

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);
}
让我们从GetNumber开始: 要使函数返回多个值,可以通过引用传递参数。对通过引用传递参数有很好的解释

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

其中别名是指向主函数中声明的num或num2的内存位置的指针,请参见下面的函数。这允许您在变量传递到的函数中更改它们的值

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;
}

将API从浮点数更改为浮点数;要使GetNumberFloat*无效,请使用float*;另外scanf%2f,->scanf%f,函数不返回任何内容。您将其标记为返回float。在C中没有默认初始化为0。事实上,OP报告了相反的行为:当我首先输入较大的数字时,它总是说的第二个数字较大。在C中没有“按引用传递”这样的东西。所有东西都是按值传递的。您正在将num地址的值传递给scanf。请阅读。任何人都很难理解你的代码。谢谢Nik….:D我修好了it@andreanobles,我编辑了我的答案,以便findLargest将指针作为参数。希望能有所帮助。非常感谢您的帮助,我使用了float findlargestfloatnumptr,floatnum2ptr{if*numptr>*num2ptr{return*numptr;}else{return*num2ptr;}实际上,你所说的是程序员所使用的一种常见技术。它被称为A,它在C、C++、C和许多其他语言中无处不在。它基本上是一个线性的缩写,如果是这样的情况,那么上面的例子就是一个完美的应用。最好不要使用教授还没有教过你的东西,仅供参考。
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;
}