C++ 为什么这个程序有时不';t显示输出,有时显示?(降雨计划)

C++ 为什么这个程序有时不';t显示输出,有时显示?(降雨计划),c++,visual-studio-2013,C++,Visual Studio 2013,我最近完成了一个计算一年中总降雨量、平均降雨量、最高降雨量和最低降雨量的程序。该程序要求用户输入每个月的降雨量,然后进行计算。当我得到最低和最高数字时,程序应该显示这些数字对应的月份,而不是数字本身 我的程序运行良好,没有任何错误。但是,我注意到,有时,根据输出,我会得到以下三种情况之一: 程序显示数字最高的月份,但不显示数字最低的月份 程序显示数字最低的月份,但不显示数字最高的月份 程序显示一切,没有任何问题 代码如下: #include<iostream> #include&

我最近完成了一个计算一年中总降雨量、平均降雨量、最高降雨量和最低降雨量的程序。该程序要求用户输入每个月的降雨量,然后进行计算。当我得到最低和最高数字时,程序应该显示这些数字对应的月份,而不是数字本身

我的程序运行良好,没有任何错误。但是,我注意到,有时,根据输出,我会得到以下三种情况之一:

  • 程序显示数字最高的月份,但不显示数字最低的月份
  • 程序显示数字最低的月份,但不显示数字最高的月份
  • 程序显示一切,没有任何问题
代码如下:

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

其中确定的具体降雨量或具体月份取决于实际输入。

您需要在您分别设置
min1
max1
的任何地方设置
min2
max1

问题是,如果出现以下情况,您从未将字符串设置为最大或最小月份从来没有遇到过:

  if (data[k] > max1)
  //...
  if (data[l] < min1)

如果最大值出现在第一个月,您似乎没有设置max2,因为
if(data[k]>max1)
从来都不是真的。
if(data[k]>max1)
如果data[k]从来都不大于
max1
,那该怎么办?谢谢保罗!!!现在我可以更好地看到错误。我希望我不要再犯这个错误了。
  if (data[k] > max1)
  //...
  if (data[l] < min1)
int maxIndex = 0;
max1 = data[0];

for (int k = 0; k < 12; k++) 
{
    if (data[k] > max1)
        maxIndex = k;
}

int minIndex = 0;
min1 = data[0];

for (int l = 0; l < 12; l++) 
{
    if (data[l] < min1)
        minIndex = l;
}

max2 = months[maxIndex];
min2 = months[minIndex];