2017-07-12 2 views
1

私は問題を適切に記述するのに苦労しているので、文句を許してください。与えられた反復回数の後に合計値をクリアするには?

私は、何年にもわたって毎月降雨の概要を作成するプログラムに取り組んでいます。現在、プログラムは5年間で12ヶ月間ループし、結果を印刷します。

残念ながら、私は年次合計を正しく計算する方法を見つけることができません。例:最初の12個の値(1年目)に1を入力すると、合計は12になります.2年目に同じことをすると、合計は24になります。それは値の合計を出力しているかのように見えます1年以内の合計だけでなく、すべての年から。

これは私が見ています何の要約版です:

void inputdata() { 
    /* variable definition: */ 
    float Rain = 1.0; 
    float total = 0.0; 

    // Input Data 
    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; 
     } 
     printf("Total rainfall: %.2f\t\n", total); 
    } 
    for (int month = 0; month < NUMMONTHS; month++) { 
     total = total + Rain; 
    } 
    } 

最大の不満:

Do you want to input Precipitation data? (y for yes) 
y 
Enter rain for 1, 1: 
1 
Enter rain for 1, 2: 
1 
... 
1 
Enter rain for 1, 11: 
1 
Enter rain for 1, 12: 
1 
Total rainfall: 12.00 
Enter rain for 2, 1: 
1 
Enter rain for 2, 2: 
1 
... 
Enter rain for 2, 12: 
1 
Total rainfall: 24.00 

を、私はこのような値以下の一つとして、別のループを構築しようとしたときには、常に0.00です私はそれがどのように数学演算を実行しているかをほとんど知ることができますが、それらを修正する方法だけではありません。あなたは、内側ループを残した直後

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

// function prototypes 
void inputdata(); 
void printdata(); 

// Global variables 
// These are available to all functions 
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 input Precipatation data? (y for yes)\n"); 
    scanf("%c", & enterData); 
    if (enterData == 'y') { 
     // Call Function to Input data 
     inputdata(); 
     // Call Function to display data 
     printdata(); 
    } else { 
     printf("No data was input at this time\n"); 
    } 
    printf("Please try the Precipitation program again. \n"); 
    return 0; 
    } 

// function to inputdata 
void inputdata() { 
    /* variable definition: */ 
    float Rain = 1.0; 
    float total = 0.0; 

    // Input Data 
    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; 
     total = total + Rain; 
     } 
     printf("Total rainfall: %.2f\t\n", total); 
    } 
    } 

// Function to printdata 
void printdata() { 
    // Print data 
    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 %5.2f\n", years[year], months[month], Raindata[year][month]); 
    }  
    } 
} 
+0

「合計」を計算するループでは、各月の金額が加算されません。先月の「NUMMONTHS」回を追加するだけです。 – Barmar

+0

なぜ、印刷機能ではなく、入力機能で合計を印刷していますか? – Barmar

+0

好奇心がなぜ12月の 'char month [NUMMONTHS] [12]'ですか? const char * months [NUMMONTHS] = { "Jan"、 "Feb"、 "Mar"、 "Apr"、...};を代わりに提案してください。 – chux

答えて

2

が、外側のループの内側に、0に設定することでTotalの値をリセットします。
は、ここに私の完全なコードです。

for (int year = 0; year < NUMYEARS; year++) { 
    total = 0.0; 
    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; 
    total = total + Rain; 
    } 
    printf("Total rainfall: %.2f\t\n", total); 
} 

このようにして、毎年ゼロから始めます。

+0

彼は年ごとの合計を得るために、毎年新たに始めたいと思っています。 – Barmar

+0

@Barmar私は誤解しているようです - それは私がしたことではありませんか? – GoodDeeds

+0

あなたが書いたことを申し訳ありません。 – Barmar

3

合計をprintdata()に計算し、毎年の初めに0に設定します。

void printdata() { 
    // Print data 
    printf("year\t month\t rain\n"); 
    for (int year = 0; year < NUMYEARS; year++) { 
    float total = 0; 
    for (int month = 0; month < NUMMONTHS; month++) { 
     printf("%s\t %s\t %5.2f\n", years[year], months[month], Raindata[year][month]); 
     total += Raindata[year][month]; 
    } 
    printf("%s Total\t %6.2f\n", total); 
    } 
} 
+0

あなたの8番目の行に小さなタイプミス: 'Randata'は' Raindata'でなければなりません。 – woz

関連する問題