我写了一个叫做averageFloat的程序,该程序应该接受一个数字的扫描输入。这允许用户输入多个浮点输入,然后函数将这些输入取平均值。
但是,当我编译并运行程序时,它确实接受了我的输入,但返回了-1610612736。
我已经尝试过更改scanf的存储,我添加了一个指针,并包含了scanf将在main函数和averageFloat函数中调用的全局变量。
#include <stdio.h>
float averageFloat(int a);
int y;
float z;
int main()
{
int n;
printf("Please input a number of floats you want to include ");
n = scanf("%d", &y);
averageFloat(n);
return 0;
}
float averageFloat(int a){
for(int i = 0; i < a; i++){
printf("Please enter the float variables you want your program to average");
scanf("%f", &z);
z += z;
}
printf("the average float is %d", z/a);
return z / a;
}
我希望这能得到我的输入n,比方说n = 5。
我希望能够输入5个浮点数,例如0.5、0.2、0.3、0.1和1.5,然后除以n
感谢您阅读。
答案 0 :(得分:3)
您的代码中有几个问题:
使用scanf
写入z
变量,这也是您的
求和变量。基本上,每次阅读输入都会覆盖总数
将十进制数扫描到浮点变量中将导致意外结果。需要将scanf("%d",&z);
更改为scanf("%f",&z);
printf语句需要一个整数,并且您正在传递一个指向浮点数的指针。因此需要将printf("the average float is %d", z/a);
更改为printf("the average float is %f", z/a);
变量y需要传递到averageFloat
函数,而不是前一行中scanf
函数的返回值。
答案 1 :(得分:2)
当您执行scanf("%f", &z);
时,您将破坏z
的任何值。您也没有检查scanf
是否成功。
您应该遵循以下原则:
float zz= 0.0;
scanf("%f", &zz);
z += zz;
此外,完成后,您可以执行以下操作:
printf("the average float is %d", (int) z/a);
return z / a;
或者:
printf("the average float is %f", z/a);
return z / a;
第一个截断为int
(%d
),第二个截取为float
。
您还应该检查a
是否不为零。
您还应该使用:
averageFloat(y);
答案 2 :(得分:-1)
首先,变量不应该是全局的。其次,添加到z然后阅读。 您可能要调用函数averageFloat(y)。