c中的指针没有得到正确的输出

时间:2017-10-25 04:19:14

标签: c pointers

我试图制作一个程序,其中包含3个函数,名为getnumber(请求数字)findlargest(找到2个数字之间最大)和displaylargest,显示哪个更大。我是新手指针,当我输入2个数字时,无论第一个数字是否更大,它总是说第二个数字更大可以有人告诉我为什么?

#include <stdio.h>

float getnumbers();
float findlargest(float*,float*);
void displaylargest(float,float*,float*);

int main ()
{
    float num1;
    float num2;
    float largest;

    num1=getnumbers();
    num2=getnumbers();

    largest=findlargest(&num1,&num2);

    displaylargest(largest,&num1,&num2);
    return 0;
}

float getnumbers()
{
    float num;
    printf("Enter a number\n");
    scanf("%2f",&num);
    return num;
}


float findlargest(float*num1ptr,float*num2ptr)
{
    float num1;
    float num2;

    *num1ptr=num1;
    *num2ptr=num2;

    if (num1>num2) {
        return num1;
    } else {
        return num2;
    }
}

void displaylargest(float largest,float*num1ptr,float*num2ptr)
{
    printf("\nthe largest is %2f ",largest);
}

5 个答案:

答案 0 :(得分:3)

您在输入时犯了一个错误,而不是分配num1=*num1ptr *nump1tr=num1 num2,而float findlargest(float*num1ptr,float*num2ptr) { float num1; float num2; num1=*num1ptr; // not *num1ptr=num1 num2=*num2ptr; // not *num2ptr=num2 if (num1>num2) { return num1; } else { return num2; } } 代码应该类似

<Image
    Width="30"
    Height="30"                                                    
    Source="Resources/Images/chat_file_attach.png">
      <Image.Style>
        <Style TargetType="{x:Type Image}">
            <Style.Triggers>
              <DataTrigger Binding="{Binding AttachStat}" Value="False">
               <Setter Property="Visibility" Value="Collapsed" />                                                                   
              </DataTrigger>
              <DataTrigger Binding="{Binding AttachStat}" Value="True">
               <Setter Property="Visibility" Value="Visible" />
              </DataTrigger>
            </Style.Triggers>
       </Style>
    </Image.Style>
</Image>

答案 1 :(得分:0)

您宣布float num1;float num2;,但您从未为其分配任何值,因此它们将包含恰好位于您计算机内存中的随机数。然后根据这些随机值检查if (num1>num2)

每次运行时都可能获得相同的“随机”值,因为计算机没有理由在内存中更改该位置,因此结果将始终相同。

您需要以相反的方式分配值:num1=*numptr1;(或直接在比较中使用参数 - 没有理由复制它们。)

答案 2 :(得分:0)

float findlargest(float *num1ptr, float *num2ptr)
{
    float num1;
    float num2;

    *num1ptr = num1;
    *num2ptr = num2;

做你(显然)认为它做的事情。在此处声明num1num2会将它们设置为任意值,然后您可以使用覆盖 num1ptr指向的变量中可能包含的任何有用数据num2ptr

更好的变体只是:

float findLargest(float num1, float num2)
{
    if (num1 > num2)
        return num1;
    return num2;
}

然后只需使用(来自main):

printf("The largest is %.2f\n", findLargest(num1, num2));

答案 3 :(得分:0)

看看你的第一个条件if(num1 > num2)这不太可能是真的,所以你不能指望一个特定的值。为什么会这样?由于您正在执行*ptr = value;任务,而您尚未执行value = *ptr;,并且由于您未初始化num1num2,因此它们将具有未指定的值。

对于这样的方法,您可以使用三元/条件运算符return condition ? trueValue : falseValue;,所以:

float largest(float a, float b) {
    return a > b ? a : b;
}

您不应该在不需要它的地方使用指针,这会使您的代码变得更加复杂。

你是如何确定问题的?

答案 4 :(得分:0)

//试试这个

包括&lt; stdio.h中&GT; //删除空格

float getnumbers();

float findlargest(float *,float *);

void displaylargest(float); //这个函数中有一个参数就足够了

int main() {

float num1;

float num2;

float largest;

num1=getnumbers();
num2=getnumbers();

largest=findlargest(&num1,&num2);

displaylargest(largest);

,而(1); //查看输出

return 0;

}

float getnumbers()

{     float num;

printf("Enter a number\n");

scanf("%2f",&num);

return num;

}

float findlargest(float num1ptr,float num2ptr)

{

float num1;

float num2;

num1 = *num1ptr;

num2 = *num2ptr;

if (num1>num2) {

    return num1;

} 

其他{

    return num2;

}

}

void displaylargest(float floating)//此处需要更改

{

printf("\nthe largest is %2f ",largest);

}