Модератор: Модераторы разделов
SwapON
Сообщения: 209
ОС: Gentoo Xfce4
Сообщение
SwapON » 10.11.2022 06:27
Вроде бы простая задачка, но я залип. Необходимо предоставить выбор пользователю и если он выберет то, чего нет в списке, предоставить снова выбор. Почему не работает условие в цикле...?
Код: Выделить всё
#include <iostream>
#include <string>
using namespace std;
int main(){
int x = 0;
while(x != 1 || x != 2 || x != 3){
cout << "\n\tМеню ресторана\n";
cout << endl;
cout << "1. Картошка жареная\n";
cout << "2. Картофельное пюре\n";
cout << "3. Суп картофельный\n";
cout << endl;
cout << "Сделайте выбор от 1 до 3\n\n";
cin >> x;
if(x == 1)
cout << "Ваш выбор - картошка жареная\n";
else if(x == 2)
cout << "Ваш выбор - картофельное пюре\n";
else if(x == 3)
cout << "Ваш выбор - cуп картофельный\n";
else
cout << "Неправильный выбор\n";
}
cout << "Приятного аппетита!\n";
}
math
Сообщения: 279
Статус: Ъ участник
ОС: Artix (= Arch without systemd)
Сообщение
math » 10.11.2022 07:07
Потому что
всегда
true , для любого числа
x .
SwapON
Сообщения: 209
ОС: Gentoo Xfce4
Сообщение
SwapON » 10.11.2022 07:25
math писал: ↑ 10.11.2022 07:07
Потому что
всегда
true , для любого числа
x .
Ну почему же?
Код: Выделить всё
Пока(х не равно 1 или х не равно 2 или х не равно 3){
Выполняй это действие
Введите х
если х == 1 (тут уже выполнилось условие цикла. Значит он должен прекратиться)
}
ormorph
Сообщения: 2913
ОС: Gentoo
Сообщение
ormorph » 10.11.2022 08:08
Не придумывайте, у вас используется оператор или. Т. е. Если x==1, то выполняется другое условие (x! =2), а оно возвращает True, следовательно цикл продолжается.
math
Сообщения: 279
Статус: Ъ участник
ОС: Artix (= Arch without systemd)
Сообщение
math » 10.11.2022 08:11
Потому что математика. Попробуйте поподставлять в это выражения числа вместо переменной икс. Например, число 1.
SwapON
Сообщения: 209
ОС: Gentoo Xfce4
Сообщение
SwapON » 10.11.2022 08:28
Дошло!
Чтобы цикл выполнялся, в его условии должно быть true . Поменял логическое ИЛИ на И и всё стало понятно. Если мы вводим не 1 и не 2 и не 3, то цикл прекращается и код идёт дальше. Сопсна что и требовалось.
P.S. маленькая, но победа!
P.P.S в огромном ЯП
math
Сообщения: 279
Статус: Ъ участник
ОС: Artix (= Arch without systemd)
Сообщение
math » 10.11.2022 10:57
SwapON писал: ↑ 10.11.2022 08:28
Если мы вводим не 1 и не 2 и не 3, то цикл прекращается и код идёт дальше.
Только наоборот: если мы вводим не 1 и не 2 и не 3, то цикл продолжается и мы запрашиваем номер снова.
Bizdelnick
Модератор
Сообщения: 20999
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 10.11.2022 15:13
Офтопик, но используйте switch, глаза же вытекают это читать. И не нужно дважды выполнять все эти сравнения, для меню из 100 блюд Вы же не будете прописывать их все в условии цикла.
Код: Выделить всё
#include <iostream>
using namespace std;
int main() {
int x = 0;
while (x == 0) {
cout << "\n\tМеню ресторана\n";
cout << endl;
cout << "1. Картошка жареная\n";
cout << "2. Картофельное пюре\n";
cout << "3. Суп картофельный\n";
cout << endl;
cout << "Сделайте выбор от 1 до 3\n\n";
cin >> x;
switch (x) {
case 1:
cout << "Ваш выбор - картошка жареная\n";
break;
case 2:
cout << "Ваш выбор - картофельное пюре\n";
break;
case 3:
cout << "Ваш выбор - cуп картофельный\n";
break;
default:
cout << "Неправильный выбор\n";
x = 0;
}
}
cout << "Приятного аппетита!\n";
return 0;
}
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
SwapON
Сообщения: 209
ОС: Gentoo Xfce4
Сообщение
SwapON » 11.11.2022 01:18
Bizdelnick писал: ↑ 10.11.2022 15:13
Офтопик, но используйте switch...
Отличное решение, но уже выявлен баг. Если нажать вместо цифры букву, то цикл уходит в бесконечность.
Bizdelnick
Модератор
Сообщения: 20999
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 11.11.2022 01:52
SwapON писал: ↑ 11.11.2022 01:18
Отличное решение, но уже выявлен баг. Если нажать вместо цифры букву, то цикл уходит в бесконечность.
Этот баг в Вашем коде уже был. Читайте учебник дальше, про то, как работает форматированный ввод. ☺
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик