user2345434
user2345434

Reputation: 21

C programming return value odd

I tried to search this everywhere, but it's kind of difficult to word, it's most likely a simple fix. Basically when I go through my program that is supposed to compute the average rainfall for a year, it comes out with a very large number, however, I thought it may have been just that I was doing the arithmetic wrong or had a syntax error of some sort, but that was not the case, when I checked the value that the function returned it was the proper value.

#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;



}

Upvotes: 2

Views: 156

Answers (5)

Nathan
Nathan

Reputation: 672

changed your main.. have a look and let me know if you have understood what changes i have made?

#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;
}

However instead of using gets you should use fgets but i forgot how to counter the issue of using simultaneous fgets to read input from the standard input stream.

Also initialize the total variable as you are adding in the loop new values to existing value in that variable which would not necessarily add to zero as the premier element. so it could be any garbage value + loop values.

I understand you are practicing pointer concept so you passed the address of the array of floats to your second function but if the rainfall function is not useful in main, Better to restrict the same where it would be useful

Upvotes: 0

marcadian
marcadian

Reputation: 2618

  1. Initialize the total to 0
  2. Why you make it complicated? Why not just

    return total / 12 ?

    and called it like

    outputAverage = getData(rainfall)

Upvotes: 2

Bill
Bill

Reputation: 5772

You have uninitialized variable total which is taking garbage value, thus you see a very large answer.

Upvotes: 0

unxnut
unxnut

Reputation: 8839

This is a classic problem in C programming. You are mixing strings and numbers on the input. You are better off reading the input into a string and then, using sscanf to parse it properly.

Upvotes: 0

Keith Nicholas
Keith Nicholas

Reputation: 44298

you need to initialize total

float total = 0.0;

Upvotes: 7

Related Questions