У меня проблемы с настройкой моей программы. В той части проекта, с которой у меня возникли трудности, мне нужно создать функцию, которая проверяет два разных числа, введенных пользователем. Однако, когда я запускаю программу, я получаю две ошибки.
Во-первых, ввод сначала читается, когда я вводю 0 (хотя я этого не делал)
А во-вторых, он обрабатывает первый вход через второй тест проверки входов
Функциональные прототипы:
int validate(int , int);
Главный:
do
{
//display the menu
displayMenu();
cin >> choice;
validate(choice, months);
// process the user's choice
if (choice != QUIT_CHOICE)
{
// get the number of months
cout << over3 << "For how many months? ";
cin >> months;
validate(choice, months);
}
И прототип функции под вопросом:
int validate(int choice, int months)
{
while (choice < 1 || choice > 4)
{
cout << over3 << choice << " is not between 1 and 4! Try again: ";
cin >> choice;
}
while (months < 1 || months > 12)
{
cout << over3 << months << " is not between 1 and 12! Try again: ";
cin >> months;
}
}
Поскольку оба они независимы друг от друга, вам нужно разделить их на две функции для вашей цели: validateChoice
который состоит из первого цикла и validateMonths
который состоит из второго цикла while.
Если вы хотите отдельную функцию, вам нужно передать соответствующий параметр
int validate(int value, int lowLimit, int HighLimit)
{
while(value < lowLimit || value > HighLimit)
{
//print error message here
cin>> value;
}
return value;
}
В основном, сделать
cin >> choice;
choice = validate(choice, 1, 4);
Аналогично для months
,
Вы не показали, как (если вообще) вы инициализируете choice
а также months
до вашего do
цикл, но я думаю, у вас нет. Поэтому здесь:
cin >> choice;
validate(choice, months);
Вы передаете неинициализированное значение в качестве второго аргумента validate
, Неинициализированное значение может быть чем угодно; в твоем случае, кажется, ноль.