我试图制作一个程序,其中包含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);
}
答案 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;
这不做你(显然)认为它做的事情。在此处声明num1
和num2
会将它们设置为任意值,然后您可以使用覆盖 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;
,并且由于您未初始化num1
和num2
,因此它们将具有未指定的值。
对于这样的方法,您可以使用三元/条件运算符return condition ? trueValue : falseValue;
,所以:
float largest(float a, float b) {
return a > b ? a : b;
}
您不应该在不需要它的地方使用指针,这会使您的代码变得更加复杂。
你是如何确定问题的?
答案 4 :(得分:0)
//试试这个
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);
}