Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 14.11.2019
Сообщений: 46

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

22.03.2020, 11:42. Показов 1477. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2020, 11:42
Ответы с готовыми решениями:

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

тернарный оператор
объясните понятным языком что это такое в с++ и пояснение почему так //r=большее число из 2х значений #define maximum(x, y, r) int...

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

10
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,219
22.03.2020, 11:54
Нет, нельзя. Оператор ?: - это оператор в выражении. В выражении не может быть никакого break, т.к. break - это не оператор.

P.S. К if это никакого отношения на имеет. Поэтому "тернарный оператор if" - это какой-то набор слов.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.03.2020, 11:54
Цитата Сообщение от mascrpone Посмотреть сообщение
так записать нельзя?
Вопрос - зачем?
Впрочем, если гложет любопытство (весьма похвальное свойство!), покажите этот код своему транслятору
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,219
22.03.2020, 11:59
Цитата Сообщение от Байт Посмотреть сообщение
Вопрос - зачем?
А разве из кода это не очевидно?

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

ЗЫ брейк да и тернарник вообще не нужен. Можно записать так
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
очень удобно и элегантно
C++
1
while (tmp && tmp->Data >= 0)  tmp = tmp->next;
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,219
22.03.2020, 19:37
Цитата Сообщение от _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
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
22.03.2020, 19:43
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Было бы здорово, если бы это было возможно
Разве? Помоему наличие такой возможности будет ломать нормальное представление о работе тернарного оператора.
Ведь результат работы тернарного оператора это какое-то значение. А break не имеет никакого значения.
Может подобная фича и была бы прикольной, но без тернарного оператора, что бы синтаксис был другим.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
22.03.2020, 19:43
Здесь был дубликат сообщения выше. Теперь он удалён.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,219
22.03.2020, 19:51
Цитата Сообщение от Undisputed Посмотреть сообщение
Разве? Помоему наличие такой возможности будет ломать нормальное представление о работе тернарного оператора.
Ведь результат работы тернарного оператора это какое-то значение.
Не обязательно. ?: может использоваться и с void операндами.

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

C++
1
int i = a > b ? 42 : throw "Hello world";
throw тоже "не имеет никакого значения" (он - void). Попросту выражаясь, если выполнение ветки ?: приводит к передаче управления, то про значение можно смело забывать. break тоже, при желании, можно вписать в эту идеологию.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
22.03.2020, 20:10
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не обязательно. ?: может использоваться и с void операндами.
Имеется ввиду что то вроде этого a < 0 ? f() : throw 123; // f выглядит так void f(){}
?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,219
22.03.2020, 20:14
Цитата Сообщение от Undisputed Посмотреть сообщение
Имеется ввиду что то вроде этого a < 0 ? f() : throw 123;
Ну, например, да.

Однако в первую очередь имеется в виду, что throw в ?: может сочетаться с любыми операндами. Не обязательно с void.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2020, 20:14
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru