Bool function `again ()` получает тот же результат

Я написал функцию 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 для экономии места, поэтому мне нужно создать булеву функцию, чтобы попросить пользователя перезапустите программу.

-1

Решение

В вашем коде есть логическая ошибка.

Попробуй это:

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).

3

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

Попробуйте заменить линию

if(answer == 'Y' || 'y')

от

if(answer == 'Y' || answer == 'y')
0

Линия

if (answer == 'Y' || 'y')

войдет в if блок в каждом случае, так как это не будет соответствовать тому, что вы хотели. Оценивает answer == 'Y' который является истинным или ложным, но затем ИЛИ это значение с 'y', На этом этапе 'y' преобразуется в логическое значение для логического ИЛИ, а так как все числа, отличные от 0, преобразуются в true все выражение всегда true,

Если вы исправите это

if (answer == 'Y' || answer == 'y')

у вас все еще есть следующая проблема:

Ваша функция возвращает значение только в том случае, если пользователь вводит или Y или же N в нижнем или верхнем регистре. Но что, если пользователь вводит недействительное письмо? Вам нужно определить поведение для этой ситуации. В настоящее время ваша программа не имеет оператора возврата для этого случая, в результате чего неопределенное поведение, что означает, что результат функции может быть что-нибудь.

Вы можете либо вернуть значение по умолчанию (например, false), то нужно удалить второй условный if но держи return false,

Другое решение заключается в цикле, пока пользователь не введет правильное значение.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector