¿Cómo borrar el valor de una sum después de un número dado de iteraciones?

Por favor, perdone la redacción ya que estoy luchando para describir el problema correctamente.

Estoy trabajando en un progtwig para crear resúmenes mensuales de precipitaciones a lo largo de varios años. En este momento, el progtwig pasa por 12 meses a lo largo de 5 años e imprimirá los resultados.

Desafortunadamente, no puedo averiguar cómo calcular correctamente los totales anuales. Por ejemplo: si ingreso 1 para los primeros 12 valores (es decir, el año 1), entonces el total es 12. Si hago lo mismo para el año 2, el total se convierte en 24. Parece como si estuviera imprimiendo la sum de los valores De todos los años y no solo la sum DENTRO de un año.

Esta es una versión resumida de lo que estoy viendo:

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 

Cuando intenté crear un bucle separado como el que se encuentra debajo, los valores siempre son 0.00:

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

La mayor frustración es que casi puedo ver cómo se realizan las operaciones matemáticas, pero no cómo corregirlas.
Aquí está mi código completo:

 #define NUMMONTHS 12 #define NUMYEARS 5 #include  // 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]); } } } 

Justo después de salir del bucle interno, pero dentro del bucle externo, restablezca el valor de Total estableciéndolo en 0 .

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

De esta manera, empezarás de cero cada año.

Calcule el total en printdata() y ajústelo a 0 al comienzo de cada año.

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