Я написал функцию bool again()
предложить пользователю перезапустить программу, но при любом ответе, введенном пользователем, программа будет перезапущена, несмотря ни на что.
bool again()
{
//Local variable
char answer;
cout<<"Would you like to re-run? (Y/N) ";
cin>>answer;
cin.ignore(100,'\n');if(answer == 'Y' || 'y')
{
return true;
}
if(answer == 'N' || 'n')
{
return false;
}
}
...
do
{
menu(gameamount,response);
if (response == 1)
{
inputs(gameamount, game_count);
writeout(gameamount);
}
if (response == 2)
{
outputs(gameamount, game_count);
}
}while(again());
return 0;
}
Я попытался использовать else и else if и вернуть false после первого оператора if, но это все еще не сработало. Я не могу поместить блок кода в main для экономии места, поэтому мне нужно создать булеву функцию, чтобы попросить пользователя перезапустите программу.
В вашем коде есть логическая ошибка.
Попробуй это:
if(answer == 'Y' || answer == 'y')
{
return true;
}
if(answer == 'N' || answer == 'n')
{
return false;
}
Вы также должны вывести сообщение на случай, если пользователь решит ввести что-то другое, кроме 'Y'
,'y'
,'N'
или же 'n'
,
Кроме того, я не уверен на 100% в этом, но я думаю, что ваш код всегда возвращается true
в первом операторе if, потому что вы проверяете, 'y'
это правда, что я думаю, что это всегда так.
if(answer == 'Y' || 'y')
{
return true;
}
Любое значение, отличное от 0, будет равно true, а символ 'y'
когда рассматривается как целое число, оно соответствует соответствующему коду ASCII (в данном случае 121).
Попробуйте заменить линию
if(answer == 'Y' || 'y')
от
if(answer == 'Y' || answer == 'y')
Линия
if (answer == 'Y' || 'y')
войдет в if
блок в каждом случае, так как это не будет соответствовать тому, что вы хотели. Оценивает answer == 'Y'
который является истинным или ложным, но затем ИЛИ это значение с 'y'
, На этом этапе 'y'
преобразуется в логическое значение для логического ИЛИ, а так как все числа, отличные от 0, преобразуются в true
все выражение всегда true
,
Если вы исправите это
if (answer == 'Y' || answer == 'y')
у вас все еще есть следующая проблема:
Ваша функция возвращает значение только в том случае, если пользователь вводит или Y
или же N
в нижнем или верхнем регистре. Но что, если пользователь вводит недействительное письмо? Вам нужно определить поведение для этой ситуации. В настоящее время ваша программа не имеет оператора возврата для этого случая, в результате чего неопределенное поведение, что означает, что результат функции может быть что-нибудь.
Вы можете либо вернуть значение по умолчанию (например, false
), то нужно удалить второй условный if
но держи return false
,
Другое решение заключается в цикле, пока пользователь не введет правильное значение.