【发布时间】:2015-04-13 01:39:00
【问题描述】:
我最近完成了一个程序,该程序可以计算一年中的总降雨量、平均降雨量、最高降雨量和最低降雨量。该程序要求用户输入每个月的降雨量,然后进行计算。当我得到最低和最高数字时,程序应该显示与这些数字相对应的月,而不是数字本身。
我的程序运行良好,完全没有任何错误。但是,我注意到有时,根据输出,我会得到以下三种情况之一:
- 程序显示数字最大的月份,但不显示数字最小的月份。
- 程序显示编号最小的月份,但不显示编号最大的月份。
- 程序显示一切都没有任何问题
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
//array containing the months
string months[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
//variables
double data[12];
double sum = 0;
double avg, max1, min1;
string max2, min2;
for (int i = 0; i < 12; i++)//asks the user for input for each month
{
cout << "Enter rainfall for " << months[i] << ": ";
cin >> data[i];
while (data[i] < 0) //input validation
{
cout << "invalid data (negative rainfall) -- retry";
cin >> data[i];
}
}
for (int j = 0; j < 12; j++) //the sum of all of the numbers
{
sum += data[j];
}
max1 = data[0];
for (int k = 0; k < 12; k++) //calculates the biggest number and its month
{
if (data[k] > max1)
{
max1 = data[k];
max2 = months[k];
}
}
min1 = data[0];
for (int l = 0; l < 12; l++) //calculates the least number and its month
{
if (data[l] < min1)
{
min1 = data[l];
min2 = months[l];
}
}
avg = sum / 12;
//output
cout << "Total rainfall: " << sum << endl;
cout << "Average rainfall: " << avg << endl;
cout << "Least rainfall in " << min2 << endl;
cout << "Most rainfall in " << max2 << endl;
return 0;
}
输出示例:
我不知道为什么会这样。我想是否有人可以帮助我回答这个问题以及如何解决这个错误。
如果您需要原始问题文本,我也会将其留在这里。谢谢!
降雨统计
编写一个程序,让用户将 12 个月(从 1 月开始)每个月的总降雨量输入到 doubles 数组中。程序应计算并显示(按此顺序):
全年的总降雨量, 月平均降雨量, 以及金额最高和最低的月份。
月份应以公历中月份的英文名称表示,即:1 月、2 月、3 月、4 月、5 月、6 月、7 月、8 月、9 月、10 月、11 月、12 月。
输入验证:每月降雨量数据不接受负数。当输入负值时,程序输出“无效数据(负降雨)--重试”并尝试重新读取该值。
提示和输出标签:十进制值应使用默认精度显示,即不指定精度。读取的每个项目都应由格式为“输入 MONTH 的降雨量:”的字符串提示,其中 MONTH 是“一月”或“二月”或...或“十二月”。输出应为以下形式:
Total rainfall: 12.36
Total rainfall: 1.03
Least rainfall in August
Most rainfall in April
确定的具体降雨量或具体月份取决于实际输入。
【问题讨论】:
-
看起来你没有设置 max2 如果最大值发生在第一个月,因为
if (data[k] > max1)永远不会是真的。 -
if (data[k] > max1)如果 data[k] 永远不会大于max1怎么办?