Я пишу простую программу как упражнение, в котором пользователь вводит оценки (тип символа), и система проверяет вводимые данные, сравнивая введенные пользователем данные с вектором, содержащим оценки.
У меня проблемы с записью логики c, которая проверяет, является ли ввод действительным или нет, преобразует ввод в верхний регистр, а затем вставляет ввод в вектор. Я хочу, чтобы программа go вернулась к началу l oop, если пользователь не введет допустимый символ и снова запросит допустимый ввод. Прямо сейчас программа проверяет ввод и отправляет сообщение «Пожалуйста, введите правильную оценку», но вставьте ввод в вектор независимо от того, верный он или нет. Это не желаемый результат.
Я только начал изучать c ++, извините за грязный код.
Это функция, которая получает пользовательский ввод, преобразует его в верхний регистр и проверяет по вектору.
void gradesInput() {
char upperGrade;
bool result = true;
for (size_t i = 0; i < dGrades.size() && result == true; i++)
{
cout << "Please enter your student grades...\n";
cin >> dGrades[i];
upperGrade = toupper(dGrades[i]);
result = validateInput(upperGrade);
if (result == true){
cout << "That's a valid grade.";
}
else {
cout << "Please enter a valid grade.";
}
}
}
Эта функция запускает проверку:
bool validateInput(char uInput) {
vector <char> grades(arr, arr + sizeof(arr) / sizeof(arr[0]));
bool result = binary_search(grades.begin(), grades.end(), uInput);
return result;
}
И это объявление вектора и массива, которое я использую:
std::vector <char> dGrades(10);
static const char arr[] = { 'A', 'B', 'C', 'D', 'F' };
Я вставка пользовательского ввода в вектор dGrades после сравнения ввода с массивом и преобразования в верхний регистр.
Буду признателен за помощь или любое руководство.