0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 46
1

Тернарный оператор if

22.03.2020, 11:42. Показов 463. Ответов 10
Метки нет (Все метки)

так записать нельзя?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void chek(comp* top) {
    comp* tmp = top, *tmp1, *last;
    last = chekmines(top);
    if (last == NULL) {
        cout << "В стеке нет отрицательных эл";
        return;
    }
    while (tmp) tmp->Data >= 0 ? tmp = tmp->next : break;
    
    while (tmp) {
        
    }
   
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2020, 11:42
Ответы с готовыми решениями:

Тернарный оператор vs if/else
Зачем? Ведь, так элегантнее. Начало https://www.cyberforum.ru/cpp-beginners/thread718192.html

тернарный оператор
объясните понятным языком что это такое в с++ и пояснение почему так //r=большее число из 2х...

Тернарный оператор
Добрый день, как доказать, что нету тенарного оператора ? Я как понимаю, есть только тенарная...

Альтернатива if (.) {.} (тернарный оператор)
блин запамятовал как это делается пишут вместо стандартной формы что то типа y &lt; x : x = m...

10
С чаем беда...
Эксперт CЭксперт С++
9270 / 4766 / 1292
Регистрация: 18.10.2014
Сообщений: 10,884
22.03.2020, 11:54 2
Нет, нельзя. Оператор ?: - это оператор в выражении. В выражении не может быть никакого break, т.к. break - это не оператор.

P.S. К if это никакого отношения на имеет. Поэтому "тернарный оператор if" - это какой-то набор слов.
0
Заблокирован
Эксперт C
22.03.2020, 11:54 3
Цитата Сообщение от mascrpone Посмотреть сообщение
так записать нельзя?
Вопрос - зачем?
Впрочем, если гложет любопытство (весьма похвальное свойство!), покажите этот код своему транслятору
0
С чаем беда...
Эксперт CЭксперт С++
9270 / 4766 / 1292
Регистрация: 18.10.2014
Сообщений: 10,884
22.03.2020, 11:59 4
Цитата Сообщение от Байт Посмотреть сообщение
Вопрос - зачем?
А разве из кода это не очевидно?

Было бы здорово, если бы это было возможно: очень удобно и элегантно. Однако с throw так можно (ибо throw - оператор), а вот с break - нельзя.
0
4642 / 2155 / 272
Регистрация: 01.03.2013
Сообщений: 5,738
Записей в блоге: 22
22.03.2020, 12:42 5
После подобных тем начинаешь верить, что начинать лучше с языков, где не смешиваются понятия инструкций и выражений.

ЗЫ брейк да и тернарник вообще не нужен. Можно записать так
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
очень удобно и элегантно
C++
1
while (tmp && tmp->Data >= 0)  tmp = tmp->next;
0
С чаем беда...
Эксперт CЭксперт С++
9270 / 4766 / 1292
Регистрация: 18.10.2014
Сообщений: 10,884
22.03.2020, 19:37 6
Цитата Сообщение от _Ivana Посмотреть сообщение
while (tmp && tmp->Data >= 0)  tmp = tmp->next;
Трудночитаемо.

Условие самого цикла должно описывать весь домен итерации ("где мы ищем"). А условие досрочного завершения (например "нашли, что искали") должно реализовываться в теле цикла и вызвать завершение по break

C++
1
2
3
for (; tmp != nullptr; tmp = tmp->next)
  if (tmp->Data < 0)
    break;
Так получается удобочитаемый код: хорошо разделено и хорошо видно "где мы ищем" и "что мы ищем".

А запихивание всех условий в кучу в условие цикла порождает нечитаемый код. Вариант ТС тоже не блещет удобочитаемостью, но там хотя бы условия разделены.
0
749 / 352 / 72
Регистрация: 10.06.2014
Сообщений: 2,371
22.03.2020, 19:43 7
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Было бы здорово, если бы это было возможно
Разве? Помоему наличие такой возможности будет ломать нормальное представление о работе тернарного оператора.
Ведь результат работы тернарного оператора это какое-то значение. А break не имеет никакого значения.
Может подобная фича и была бы прикольной, но без тернарного оператора, что бы синтаксис был другим.
0
749 / 352 / 72
Регистрация: 10.06.2014
Сообщений: 2,371
22.03.2020, 19:43 8
Здесь был дубликат сообщения выше. Теперь он удалён.
0
С чаем беда...
Эксперт CЭксперт С++
9270 / 4766 / 1292
Регистрация: 18.10.2014
Сообщений: 10,884
22.03.2020, 19:51 9
Цитата Сообщение от Undisputed Посмотреть сообщение
Разве? Помоему наличие такой возможности будет ломать нормальное представление о работе тернарного оператора.
Ведь результат работы тернарного оператора это какое-то значение.
Не обязательно. ?: может использоваться и с void операндами.

Цитата Сообщение от Undisputed Посмотреть сообщение
А break не имеет никакого значения.
Это представление уже "сломано" с самого начала: как я уже сказал выше, в С++ всегда разрешалось

C++
1
int i = a > b ? 42 : throw "Hello world";
throw тоже "не имеет никакого значения" (он - void). Попросту выражаясь, если выполнение ветки ?: приводит к передаче управления, то про значение можно смело забывать. break тоже, при желании, можно вписать в эту идеологию.
1
749 / 352 / 72
Регистрация: 10.06.2014
Сообщений: 2,371
22.03.2020, 20:10 10
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не обязательно. ?: может использоваться и с void операндами.
Имеется ввиду что то вроде этого a < 0 ? f() : throw 123; // f выглядит так void f(){}
?
0
С чаем беда...
Эксперт CЭксперт С++
9270 / 4766 / 1292
Регистрация: 18.10.2014
Сообщений: 10,884
22.03.2020, 20:14 11
Цитата Сообщение от Undisputed Посмотреть сообщение
Имеется ввиду что то вроде этого a < 0 ? f() : throw 123;
Ну, например, да.

Однако в первую очередь имеется в виду, что throw в ?: может сочетаться с любыми операндами. Не обязательно с void.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2020, 20:14

Тернарный оператор и наследование
Добрый день! Почему не компилируется этот код: class A{ }; class B :public A { }; class...

Вложенный тернарный оператор
Здравствуйте! Нужно вывести кол-во корней квадратного уравнения в зависимости от дискриминанта,...

Засунуть в тернарный оператор
Помогите засунуть выражение if ( (i &lt; 0 || j &lt; 0) || (i &gt;= ROW || j &gt;= COL) || (i == oi &amp;&amp; j ==...

Шахматы(заменить тернарный оператор) на if else
#include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; void main() { int h, w, i,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.