Я строю программу, которая предназначена для хранения значений из пар день недели / значение в вектор, а затем для отображения и суммирования значений для каждого дня недели. Поэтому я прошу пользователя ввести как строку (день недели, которая может быть в 4 разных формах для каждого дня недели), так и целое число (соответствующее значение) для каждого ввода cin. (Программа пока показывает только понедельник и условие выхода; позже я добавлю его также со вторника по воскресенье.)
Программа также предназначена для определения неверного ввода (и позволяет пользователю повторить попытку их вклад). Однако у меня возникают проблемы с тем, чтобы программа распознала ошибочные данные, если только день недели введен неправильно. Например, программа успешно объявит «Обнаружен неправильный день недели», если я введу «тестовый тест» в качестве ввода. Он также объявит об этом сообщении (хотя формулировку необходимо изменить), если я введу «Понедельник х». Однако, если я введу «Тест 5», программа примет это без отображения сообщения «Неверный день недели».
Как можно изменить мою программу так, чтобы при использовании ранее существующего оператора else отображалось «Неверный день недели», когда я вводил что-то вроде «Тест 5»?
Одним из решений было бы создание очень длинного оператора if, который отображает это сообщение, если введенный день недели не соответствует ни одной из 29 допустимых записей дня недели (например, «Monday», «monday, «Понедельник», «понедельник», «вторник», «вторник» ...). Тем не менее, я хотел бы найти более простой подход.
Спасибо за вашу помощь!
#include "../std_lib_facilities.h"
#include <iostream>
//Program in progress. Completing as part of my independent study of Programming: Principles and Practice by Bjarne Stroustrup.
int main()
{
string dayofweek;
int value;
vector<int> mondayvalues;
vector<int> tuesdayvalues;
vector<int> wednesdayvalues;
vector<int> thursdayvalues;
vector<int> fridayvalues;
vector<int> saturdayvalues;
vector<int> sundayvalues;
int incorrectentrycounter = 0;
int mondaysum = 0;
cout << "Please enter days of the week followed by values in integer form. When you are finished, please enter Done 0.\n";
string incorrectnumdump;
while (cin) {
if (cin >> dayofweek >> value) {
if (dayofweek == "Monday" || dayofweek == "monday" || dayofweek == "Mon" || dayofweek == "mon") {
mondayvalues.push_back(value);
}
if ((dayofweek == "Done") && (value == 0)) {
break;
}
}
else {
cin.clear();
cin >> incorrectnumdump;
cout << "Incorrect day of week detected; please try again.\n";
incorrectentrycounter++;
continue;
}
}
cout << "Here are the values you entered for each day of the week, along with their sums:\n";
cout << "Monday: ";
for (int x : mondayvalues)
cout << x << " ";
for (int i = 0; i < mondayvalues.size(); i++) {
mondaysum += mondayvalues[i];
}
cout << "\nSum of Monday values: " << mondaysum;
cout << "\nThere were " << incorrectentrycounter << "entries that displayed non-valid days of the week.";
}