Недавно я закончил работу над программой, которая вычисляет общий, средний, самый высокий и самый низкий уровень осадков в течение года. Программа требует, чтобы пользователь вводил количество осадков каждый месяц, а затем выполнял вычисления. Когда я получаю самые низкие и самые высокие цифры, программа должна отображать месяц, соответствующий этим номерам, а не самому числу.Почему эта программа иногда не отображает вывод, а иногда и делает? (Программа осадков)
Моя программа работает нормально, и я вообще не ошибаюсь. Тем не менее, я замечаю, что иногда, в зависимости от выхода, я получаю один из этих трех случаев:
- Программа отображает месяц с наибольшим номером, но на нем не отображается месяц с самым низким номером.
- Программа отображает месяц с самым низким номером, но на нем не отображается месяц с наибольшим номером.
- Программа отображает все без каких-либо проблем
Код следующее:
#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 месяцев (начиная с января) в массив удваивается. Программа должна рассчитать и отобразить (в указанном порядке):
общее количество осадков за год, Среднемесячные осадки, и месяцы с самыми высокими и самыми низкими уровнями.
В григорианском календаре месяцы должны выражаться в виде английских имен в месяцах, то есть в январе, феврале, марте, апреле, мае, июне, июле, августе, сентябре, октябре, ноябре, декабре.
Подтверждение ввода: не принимайте отрицательные числа для месячных осадков. Когда вводится отрицательное значение, программа выводит «недопустимые данные (отрицательные осадки) - повторить попытку» и пытается перечитать значение.
Подсказки и метки вывода: Десятичные значения должны отображаться с использованием точности по умолчанию, т. Е. Не указывать точность. Для каждого прочитанного элемента должна быть указана строка формы «Введите количество осадков за месяц:», где MONTH - «январь» или «февраль» или ... или «декабрь». Выходные данные должны быть следующими:
Total rainfall: 12.36
Total rainfall: 1.03
Least rainfall in August
Most rainfall in April
, где определенное количество осадков или определенных определенных месяцев зависит от фактического ввода.
10 Похоже, вы не устанавливаете max2, если max происходит в первый месяц, потому что 'if (data [k]> max1)' Никогда не будет true. – drescherjm
'if (data [k]> max1)' Что делать, если данные [k] никогда не превышают 'max1'? – PaulMcKenzie