Предмет: Информатика, автор: KateVV1

C++
Почему не работает выражение

a==0 ? break:continue; ???? (внутри цикла)


clinteastwood2: А почему должно работать?
KateVV1: По синтаксису все правильно вроде, почему нет
clinteastwood2: Что такое а?
clinteastwood2: оно вообще может быть 0?
KateVV1: int a;
KateVV1: cin>>a;
KateVV1: просто переменная, может
KateVV1: Мне нужно что б, если пользователь введет 0, цикл прекратился
clinteastwood2: Дайте код целиком
KateVV1: В другом вопросе

Ответы

Автор ответа: nelle987
1
Тернарный оператор должен возвращать значение (или ссылку на переменную), которое потом можно использовать. Например, если в целочисленной переменной a записано число -3, то используя такой синтаксис:
int absa = a >= 0 ? a : -a;
можно присвоить переменной absa значение |-3| = 3.

Выражения break, continue (и, например, return) управляют выполнением программы, показывая, какую инструкцию выполнять следующей, и не возвращают никакого значения (даже void). Поэтому при попытке использовать такие выражения в качестве аргументов тернарного оператора, ожидающего, что оба аргумента вернут какое-то значение, возникает ошибка компиляции.

Если очень хочется использовать тернарный оператор для выхода из цикла (но зачем?) можно выбрасывать исключение, которое потом обрабатывать, например, так:
try {
    int a = 5;
    while(true) {
        a == 0 ? throw "a equals 0" : (void) 0;
        a--;
    }
} catch (char const* s) {
    if (s != "a equals 0") throw s;
};
Похожие вопросы
Предмет: Математика, автор: Ksenia7643
Предмет: Алгебра, автор: andreylazin1990