Miaka Hiraku Ответов: 3

[C++]проблема с моей циклической программой


#include <iostream>

using namespace std;

int main ()
{
    char choice;
    do
    {
        cout << "\tMCDONALD'S MENU\n Please choose from this menu:\n" << endl;
        cout << "a. McBurger\nb. McFloat\nc. Chicken Fillet with Rice\nd. McFlurry\ne. Cheeseburger with Fries\n" << endl;
        cout << "What's your order? ";  cin >> choice;  cout << "\n\n";
    } while (choice != ('a'||'b'||'c'||'d'||'e'));
}


_____
Кто-нибудь может сказать мне, что я здесь делаю не так? Он все еще зацикливается после того, как я ввожу a, b, c, d или e. Я вроде как новичок в программировании, так что некоторая помощь будет оценена по достоинству. :)

Что я уже пробовал:

Попробовал изменить тип данных переменной "choice" на string. Но все равно не получилось.

3 Ответов

Рейтинг:
21

OriginalGriff

Как правило, я бы начал с того, что предложил бы вам использовать отладчик, но в данном случае это, вероятно, еще больше сбило бы вас с толку.
Проблема в том, что при условии:

choice != ('a'||'b'||'c'||'d'||'e')
Он состоит из двух частей, которые дают логический результат:
a != b
Где
a     choice

И
b     'a'||'b'||'c'||'d'||'e'
И вы предполагаете, что это означает
if choice is any one of these values: 'a', 'b', 'c', 'd', or 'e'
Это не. Часть " b " вычисляется путем объединения каждого из значений вместе, как если бы все они были логическими значениями, где любое значение, не равное нулю, является истинным: поскольку по крайней мере одно (фактически все) из них ненулево, все "b" вычисляется как true
Таким образом, все ваше состояние фактически является "while (choice != true)", и ваш цикл продолжается вечно.
Я бы предложил вам добавить еще один вариант "x. ничего, спасибо - вместо этого я ухожу в Burger King" и изменить свое состояние на:
while (choice != 'x');

Тогда это сработает!


Рейтинг:
17

Patrice T

Кто тебе это сказал

while (choice != ('a'||'b'||'c'||'d'||'e'));

был ли это путь ?
То, что вы хотели сделать, это
while (choice != 'a' && choice != 'b' && choice != 'c' && choice != 'd' && choice != 'e');

который может быть упрощен как
while (choice < 'a' || choice > 'e');


Рейтинг:
1

Miaka Hiraku

Спасибо, ребята! Теперь я понимаю. Я просто отредактировал его, чтобы

в то время как (выбор > 'e')

ОБНОВЛЕНИЕ:
Я изменил его, как то, что сделал ppolymorphe. Если я сделаю "while (choice >' e')", то окажется, что цикл также закончится, если я введу число.