我是编码的新手,C给了我一些麻烦。我有一个函数,使用scanf()将值输入到数组中。我需要按元素对列进行分组,然后对数据求和。以下是我到目前为止的情况:
#define NUMMONTHS 12
#define NUMYEARS 5
#include <stdio.h>
// function prototypes
void inputdata();
void printdata();
void sumdata();
// 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();
// Call Function to sum data
sumdata();
}
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;
// 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;
}
}
}
// 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]);
}
}
}
// Function to sumdata
void sumdata() {
// Sum data
float sum = 0;
for (int year = 0; year < NUMYEARS; year++) {
for (int month = 0; month < NUMMONTHS; month++) {
sum += Raindata[year][month];
printf("Sum of Rainfall of Year %s is %f \n", years, sum);
}
}
}
请原谅这些缩进 - 我试图让我的sumdata()函数打印年降雨量的总和(按年分组降雨量数据)。相反,它总结了整个Rain专栏。如有任何建议,请赐教。
答案 0 :(得分:2)
您在两个循环之前声明sum = 0
,而是在第一个循环之后声明sum = 0
,并在添加所有月份之后将print语句移动到打印中,
void sumdata() {
// Sum data
float sum;
for (int year = 0; year < NUMYEARS; year++) {
sum = 0.0;
for (int month = 0; month < NUMMONTHS; month++) {
sum += Raindata[year][month];
}
printf("Sum of Rainfall of Year %s is %f \n", years, sum);
}
之前,您最初将sum声明为零,并且每次计算降雨量时,sum的值都会保留,并且会在几个月内立即打印每次迭代,现在每年重置为零,并且仅在遍历时打印通过所有月份,希望这有助于:)