为什么我的程序返回一个内存地址?

时间:2019-04-07 01:47:18

标签: c

我写了一个叫做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

感谢您阅读。

3 个答案:

答案 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)。