Сложности прототипа функции

У меня проблемы с настройкой моей программы. В той части проекта, с которой у меня возникли трудности, мне нужно создать функцию, которая проверяет два разных числа, введенных пользователем. Однако, когда я запускаю программу, я получаю две ошибки.

Во-первых, ввод сначала читается, когда я вводю 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;
}

}

0

Решение

Поскольку оба они независимы друг от друга, вам нужно разделить их на две функции для вашей цели: 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,

0

Другие решения

Вы не показали, как (если вообще) вы инициализируете choice а также months до вашего do цикл, но я думаю, у вас нет. Поэтому здесь:

cin >> choice;
validate(choice, months);

Вы передаете неинициализированное значение в качестве второго аргумента validate, Неинициализированное значение может быть чем угодно; в твоем случае, кажется, ноль.

0

По вопросам рекламы [email protected]