2016-12-10 34 views
0

这里我每个月都会提示用户降雨输入英寸的5年计划。该方案有3层主要的功能,inputDataprintData,并sumRain函数不会正确添加2d数组的元素?

我想不通为什么我的sumRain函数不正确地计算降雨量的总和每年。

我唯一的猜测是,它与不当使用循环做,但我不能肯定地说。由于这是一项家庭作业,因此暗示比实际解决方案更值得赞赏。

#define NUMMONTHS 12 
#define NUMYEARS 5 
#include <stdio.h> 

void inputData(); 
void printData(); 
void sumRain(); 

float Raindata [NUMYEARS] [NUMMONTHS]; 
char years [NUMYEARS] [5] = {"2011", "2012", "2013", "2014", "2015"}; 
char months [NUMMONTHS] [12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; 

int main() { 
    char enterData = 'y' ; 
    printf("Do you want to enter precipitation data? \n"); 
    scanf("%c", &enterData); 

    if (enterData == 'y') { 
    inputData(); 
    printData(); 
    sumRain(); 
    } 
    else {  
    printf("No data was input at this time \n"); 
    } 
    printf("Please try the precipitation program again. \n"); 
    return 0; 
} 

void inputData() { 
    float rain = 1.0; 
    for (int year = 0; year < NUMYEARS; year++) { 
    for (int month = 0; month < NUMMONTHS; month++) { 
     printf("enter rain for %d, %d: \n", year + 1, month + 1); 
     scanf("%f", &rain); 
     Raindata [year][month] = rain; 
    } 
    } 
} 

void printData() { 
    printf("year\t month\t rain\n"); 
    for (int year = 0; year < NUMYEARS; year++){ 
    for (int month = 0; month < NUMMONTHS; month++){ 
     printf("%s \t %s \t %.2f \n", years[year], months[month], Raindata[year][month]); 
    } 
    } 
} 

void sumRain() { 
    float sums [NUMYEARS] = {0, 0, 0, 0, 0}; 
    float zero = 0; 

    for (int year = 0; year < NUMYEARS; year++){ 
    for (int month = 0; month < NUMMONTHS; month++){ 
     sums[year] = zero + Raindata [year][month]; 
    } 
    printf("%s sum is %.2f \n", years[year], sums[year]); 
    } 
} 
+0

的目的:'如果(enterData ==“Y '){'如果用户输入'Y',程序是否应该继续?建议通过了'enterData通过函数:'CTYPE ... h' – user3629249

+0

调用任何的'的scanf()的时候'家庭的功能,经常检查返回值(不是:'tolower的()在头文件'找到参数值),以保证手术成功 – user3629249

+0

写'float'值有两个要求。 1)它必须包含一个小数点2)它后面必须紧跟字母'f'。实际上,'1.0'是一个'double'值,为了使它成为'float'值,写为:'1.0f'。 – user3629249

回答

1

目前尚不清楚是什么声明变量zero但在任何情况下,函数可以写关于这条线以下方式

void sumRain() { 
    float sums [NUMYEARS] = {0, 0, 0, 0, 0}; 

    for (int year = 0; year < NUMYEARS; year++){ 
    for (int month = 0; month < NUMMONTHS; month++){ 
     sums[year] += Raindata [year] [month]; 
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    } 
    printf("%s sum is %.2f \n", years[year], sums[year]); 
    } 
}