Почему не работает этот цикл Y / N? - PullRequest
0 голосов
/ 04 ноября 2011

Итак, я смотрю на вопрос, хотите ли вы повысить уровень своего персонажа.Если вы говорите «да», вас снова спрашивают, пока вы не достигнете 20-го уровня (ограничение уровня D & D) или пока вы не скажете «нет».

Я набираю y, затем нажимаю ввод, он говорит, что это неправильно, нажимает n, затем вводитвещь.Вот мой код:

char yn;
do {
    cin >> yn;
    while (yn != 'y' || yn != 'n') {
        cout << "Only y or n are valid options, try again: ";
        cin >> yn;
    }
    if (yn == 'y')
        f.levelUp();
    cout << endl;
} while(yn != 'n' || f.getLevel() != 20);

Я чувствую, что упускаю что-то очень очевидное!

Ответы [ 2 ]

7 голосов
/ 04 ноября 2011

Сделай свой ||&&.Думаю об этом;yn не может быть и «y», и «n», поэтому это условие всегда выполняется.

1 голос
/ 04 ноября 2011
while (yn != 'y' || yn != 'n')

должно быть

while (yn != 'y' && yn != 'n')

Поскольку он недействителен, только если ввод НЕ 'y' И , это НЕ 'n'.

То же самое относится и к внешнему циклу, когда вы проверяете не 'n' И еще не уровень 20, иначе вы можете выйти из этого цикла, только если введете 'n' и вы на уровне 20.

...