C++Почему не работает выражениеa==0 ? break:continue; ???? (внутри цикла)

0 голосов
143 просмотров

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

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


Информатика (59 баллов)
оставил комментарий Одаренный (4.2k баллов)

А почему должно работать?

оставил комментарий (59 баллов)

По синтаксису все правильно вроде, почему нет

оставил комментарий Одаренный (4.2k баллов)

Что такое а?

оставил комментарий Одаренный (4.2k баллов)

оно вообще может быть 0?

оставил комментарий (59 баллов)

int a;

оставил комментарий (59 баллов)

cin>>a;

оставил комментарий (59 баллов)

просто переменная, может

оставил комментарий (59 баллов)

Мне нужно что б, если пользователь введет 0, цикл прекратился

оставил комментарий Одаренный (4.2k баллов)

Дайте код целиком

оставил комментарий (59 баллов)

В другом вопросе

Дан 1 ответ
0 голосов
Архангел (148k баллов)
 
Правильный ответ

Тернарный оператор должен возвращать значение (или ссылку на переменную), которое потом можно использовать. Например, если в целочисленной переменной 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;
};

...