输出省略“1月”

时间:2012-02-21 01:20:54

标签: c++

好的,这个程序的唯一问题是在最后,我试图决定下雨总数最低或最高的几个月。我的输出效果很好,除非“Jan”(1月)是最高或最低。然后要么留空。所有其他变化都很有效。知道为什么会这样吗?我的阵列索引在某个地方?提前感谢任何建议。

#include <iostream>
#include <string>
#include <iomanip>
#include <cstdlib>
using namespace std;

int main()
{
    //declare and initialize variable and arrays
    string year[] = {"Jan", "Feb", "Mar", "April", "May", "June",
            "July", "August", "Sept", "Oct", "Nov", "Dec"}; 

    const int totalMonths = 12;

    double month[totalMonths]; 

    double average; 
    double total = 0;

    cout << "This program will calculate the total annual rainfall,\n";
    cout << "calculate the monthly average rainfall, and display\n";
    cout << "which month had the lowest amount of rainfall and which\n";
    cout << "month had the highest amount of rainfall. Please enter the\n";
    cout << "rainfall data in inches." << endl;
    cout << "----------------------------------------------------------" << endl;

    // prompt user for input, keep a total sum of data entered
    for(int i = 0; i < 12; i++)
    {
        cout << "Enter total rainfall for " << year[i] << endl;
        cin >> month[i];
        total += month[i];
    while(month[i] < 0)
    {
        cout << "Rainfall cannot be negative!\n";
        cout << "Please re-enter positive numbers" << endl;
        cin >> month[i];
    }       

    }

    //average the total rainfall
    average = total / totalMonths;

    cout << setprecision(1) << fixed;
    cout << "Total Annual rainfall is: " << total << endl;
    cout << "The average rainfall per month is: " << average << endl;

    //determine which month had the lowest and highest amount of rainfall
    double highest = 0;
    string highMonth;
    highest = month[0];
    for(int count = 0; count < totalMonths; count++)
    {
        if(month[count] > highest)
        {
            highest = month[count];
            highMonth = year[count];

        }

    }

    double lowest = 0;
    string lowMonth;
    lowest = month[0];
    for(int count = 0; count < totalMonths; count++)
    {
        if(month[count] < lowest)
        {
            lowest = month[count];
            lowMonth = year[count];
        }
    }

    cout << "The month with the highest rainfall is: " << highMonth << endl;
    cout << "The month with the lowest rainfall is: " << lowMonth << endl;  

return 0;
}

输出示例:

This program will calculate the total annual rainfall,
calculate the monthly average rainfall, and display
which month had the lowest amount of rainfall and which
month had the highest amount of rainfall. Please enter the
rainfall data in inches.
----------------------------------------------------------
Enter total rainfall for Jan
1
Enter total rainfall for Feb
2
Enter total rainfall for Mar
3
Enter total rainfall for April
4
Enter total rainfall for May
5
Enter total rainfall for June
6
Enter total rainfall for July
7
Enter total rainfall for August
89
Enter total rainfall for Sept
12
Enter total rainfall for Oct
13
Enter total rainfall for Nov
14
Enter total rainfall for Dec
15
Total Annual rainfall is: 171.0
The average rainfall per month is: 14.2
The month with the highest rainfall is: August
The month with the lowest rainfall is: <-------- //BLANK!

2 个答案:

答案 0 :(得分:3)

你永远不会将lowMonth初始化为与最低值相同的值。你应该把它初始化为年[0]。你也会遇到最高计算问题。

你可能想要这样的东西:

double lowest = month[0];
string lowMonth = year[0];
for(int count = 0; count < totalMonths; count++)
{
    if(month[count] < lowest)
    {
        lowest = month[count];
        lowMonth = year[count];
    }
}

由于最低值已经是最低值,因此永远不会评估循环中的if条件以设置lowMonth。

答案 1 :(得分:3)

我在这个程序中发现了两个问题:

  1. 你在这里的原因 - 你不允许第一个月匹配:

    double highest = 0;
    string highMonth;
    highest = month[0];
    for(int count = 0; count < totalMonths; count++)
    {
        if(month[count] > highest)
        {
            highest = month[count];
            highMonth = year[count];
        }
    }
    

    在这种情况下,month[count] > highest测试在1月份永远不会成立。修改测试:

        if(month[count] >= highest)
    

    这允许第一个月匹配。记住这一点,你可能会再犯这个错误 - 我知道我有。 (该修复与其他情况类似。)

  2. 您尚未遇到的另一个问题,但我相信您的教授会注意到:您没有正确处理负数:

    for (int i = 0; i < 12; i++)
    {
        cout << "Enter total rainfall for " << year[i] << endl;
        cin >> month[i];
        total += month[i];
        while (month[i] < 0)
        {
            cout << "Rainfall cannot be negative!\n";
            cout << "Please re-enter positive numbers" << endl;
            cin >> month[i];
        }
    }
    

    如果用户输入负数会怎样? total += month[i]行将影响总数(因此平均值),即使您的输出声称不允许负数。除非您也手动计算正确的数字,否则在简单的手动测试中可能很难发现这种情况。 (提示:当您可以根据手工计算结果检查输入时,几乎总是值得的。)