gpt4 book ai didi

C 使用嵌套循环计算年降雨量总量,并匹配用户输入

转载 作者:行者123 更新时间:2023-11-30 14:55:51 25 4
gpt4 key购买 nike

我很难理解为什么我的程序无法正确执行。我需要使用循环计算每年的总降雨量,我遇到的问题是它不排除 2 月份的用户输入,而是添加前几年的总降雨量(即 2011 年总降雨量变为 2012 年 2 月用户输入)。任何帮助将不胜感激。

#include <stdio.h>
#include <stdio.h>
#include <stdio.h>


#define NUMMONTHS 12
#define NUMYEARS 5

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

// Global variables
// These are available to all functions
float Raindata[NUMYEARS][NUMMONTHS];
float sum = 0.0;
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;
// 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");

//Function to sum rainfall
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]);
Raindata[year][NUMMONTHS+1] += Raindata[year][month];
}
printf("Total amount of rain for year %s: %5.2f\n", years[year],
Raindata[year][NUMMONTHS+1]); //prints the total amount of rain every year
}
}

这是输出:

Total amount of rain for year 2011: 40.00
2012 Jan 1.10
2012 Feb 40.00
2012 Mar 3.30

最佳答案

主要问题是您试图将每年的总计存储在一个不存在的变量中 - 一个额外的数组元素 Raindata[year][month+1]。您只声明了一个 5x12 数组,并且尝试将其用作 5x13 数组。由于数组在内存中的存储方式,您将[month+1] 值存储在下一年的数据中。

相反,我添加了一个额外的数组 (RainTotal[NUMYEARS]),并用它来存储每年的总计。

#include <stdio.h>


#define NUMMONTHS 12
#define NUMYEARS 5


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


// Global variables
// These are available to all functions
float Raindata[NUMYEARS][NUMMONTHS];
float RainTotal[NUMYEARS];
float sum = 0.0;
char years[NUMYEARS][5] = {"2011","2012","2013","2014","2015"};
char months[NUMMONTHS][4] =
{"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;
// Input Data
for (int year=0;year < NUMYEARS; year++) {
for (int month=0; month< NUMMONTHS; month++) {
printf("Enter rain for %s, %s:\n", years[year], months[month]);
scanf("%f",&Rain);
Raindata[year][month]=Rain;
}
}
}

// Function to printdata
void printdata() {
// Print data
printf ("year\t month\t rain\n");

//Function to sum rainfall
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]);
RainTotal[year] += Raindata[year][month];
}
printf("Total amount of rain for year %s: %5.2f\n", years[year],
RainTotal[year]); //prints the total amount of rain every year
}
}

我还做了一些其他更改:

  • 您声明了,第二个数组元素似乎等于年数和月数。相反,它应该是 char 字符串的预期长度加上 1(对于空终止符)。

  • 我更改了您的打印语句以显示您声明的字符串,因此 Enter rain for 2011, Jan: 而不是 Enter rain for 1, 1:

  • 我修复了您的函数原型(prototype)(其他用户也指出了)

  • 清理了您的格式 - 查看一些流行的编码标准 - 当您请求他人帮助时,这将使您的代码更具可读性:)

关于C 使用嵌套循环计算年降雨量总量,并匹配用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45362394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com