2

我试图在任何地方搜索这个,但它有点难以用词,它很可能是一个简单的修复。基本上,当我通过我的程序应该计算一年的平均降雨量时,它会得出一个非常大的数字,但是,我认为这可能只是我做错了算术或语法错误某种,但事实并非如此,当我检查函数返回的值时,它是正确的值。

#include <stdio.h>
#include <string.h>

void getData(float *, float *);

int main()
{
    char state[2], city[81];
    float rainFall[12], outputAverage, *pAverage;

    printf("Name Here\n");
    printf("Please enter the state using a two letter abreviation: ");
    gets(state);
    printf("Please enter the city : ");
    gets(city);
    pAverage = &outputAverage;
    (getData(rainFall, pAverage));
    printf("%.2f", outputAverage);


    return (0);
}

void getData(float *rainFall, float *pAverage)
{
    int i;
    float total;
    for (i=0; i<12; i++)
    {
        printf("Please enter the total rainfall in inches for month %d: ", i+1);
        scanf("%f", &rainFall[i]);
        total += rainFall[i];

    }
    *pAverage = total / 12;



}
4

5 回答 5

7

你需要初始化总

float total = 0.0;
于 2013-05-03T03:07:29.513 回答
2
  1. 将总数初始化为0
  2. 你为什么把它弄复杂?为什么不只是

    总回报 / 12 ?

    并称它为

    outputAverage = getData(降雨)

于 2013-05-03T03:08:53.560 回答
0

这是 C 编程中的一个经典问题。您在输入中混合字符串和数字。您最好将输入读入字符串,然后使用 sscanf 正确解析它。

于 2013-05-03T03:08:36.507 回答
0

您有未初始化的变量total,它正在获取垃圾值,因此您会看到一个非常大的答案。

于 2013-05-03T03:08:49.107 回答
0

改变了你的主……看看,如果你明白我做了什么改变,请告诉我?

#include <stdio.h>
#include <string.h>

void getData(float *);

int main(int argc, char*argv[])
{
    char state[3]={0}, city[81]={0};
    float outputAverage;

    printf("Name Here\nPlease enter the state using a two letter abreviation: ");
    scanf("%s",state);
    printf("Please enter the city : ");
    scanf("%s",city);
    getData(&outputAverage);
    printf("The Average Rainfall recorded for the year is %.2f\n", outputAverage);
    return 0;
}

void getData(float *pAverage)
{
    int i;
    float rainFall[12]={0}, total=0;
    for (i=0; i<12; i++)
    {
        printf("Please enter the total rainfall in inches for month %d: ", i+1);
        scanf("%f", &rainFall[i]);
        total += rainFall[i];

    }
    *pAverage = total / 12;
}

但是,gets您应该使用而不是使用,fgets但我忘记了如何解决使用同时fgets从标准输入流读取输入的问题。

当您在循环中将新值添加到该变量中的现有值时,还要初始化该total变量,该变量不一定作为首要元素添加为零。所以它可以是任何垃圾值+循环值。

我了解您正在练习指针概念,因此您将浮点数组的地址传递给您的第二个函数,但如果该rainfall函数在 main 中没有用,最好将其限制在有用的地方

于 2013-05-03T03:43:40.930 回答