Проблема в том, что ваш цикл while всегда возвращает значение true. Вы используете ||
, когда вы должны использовать &&
. Любой ввод: not 1
или not 2
или not 3
.
Измените свой код на это, и это решит проблему.
do {
cout << "Are you in section 1, 2, or 3?";
cin >> response;
} while (response != 1 && response != 2 && response != 3);
Что касается ошибки, которую вы получаете, возможно, ваш decisionThing
не получит в реальной жизни число, которое не 1
, 2
или 3
, но компилятор не знает тот. Если этот метод получает число, которое не удовлетворяет ни одному из этих случаев, что должно произойти? это не определено. Для этого у нас есть путь для этого кода, чтобы он не возвращал ничего в функции, предназначенной для возврата строки. Вы можете вернуть пустую строку или сгенерировать исключение или обработать случай default
следующим образом:
string decisionThing(int response)
{
string date;
switch (response)
{
case 1:
date = "The test will be held on the 5th.\n";
return date;
case 2:
date = "The test will be held on the 6th.\n";
return date;
case 3:
date = "The test will be held on the 9th.\n";
return date;
default:
date = "Wow, this is really unexpected, I guess nothing?\n";
return date;
}
}
Кстати, вам не нужны break
s, когда у вас есть return
. Функция немедленно вернется, поэтому все, что после этого просто не будет выполнено.