Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
109 / 89 / 28
Регистрация: 21.08.2012
Сообщений: 371
1

Вложенный тернарный оператор

10.09.2017, 00:30. Показов 3158. Ответов 4
Метки нет (Все метки)

Здравствуйте! Нужно вывести кол-во корней квадратного уравнения в зависимости от дискриминанта, ради интереса хочется реализовать без условного оператора и switch. В чем ошибочка, подскажите пожалуйста?
C++
1
cout << "Корней: " << (d > 0) ? "2" : (d == 0) ? "1" : "0";
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2017, 00:30
Ответы с готовыми решениями:

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

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

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

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

4
Велосипедист...
351 / 218 / 73
Регистрация: 15.12.2015
Сообщений: 785
10.09.2017, 00:46 2
Лучший ответ Сообщение было отмечено Никита Однороб как решение

Решение

Цитата Сообщение от Никита Однороб Посмотреть сообщение
В чем ошибочка, подскажите пожалуйста?
В приоритете операций. Нужно (d > 0) ? "2" : (d == 0) ? "1" : "0" обрамить скобками:
C++
1
cout << "Корней: " << ( (d > 0) ? "2" : (d == 0) ? "1" : "0" );
0
Эксперт С++
8426 / 4099 / 894
Регистрация: 15.11.2014
Сообщений: 9,201
10.09.2017, 00:47 3
Лучший ответ Сообщение было отмечено Никита Однороб как решение

Решение

Цитата Сообщение от Никита Однороб Посмотреть сообщение
В чем ошибочка, подскажите пожалуйста?
в приоритете операций.
сравните:

C++
1
cout << "Корней: " << ((d > 0) ? "2" : (d == 0) ? "1" : "0");
0
Велосипедист...
351 / 218 / 73
Регистрация: 15.12.2015
Сообщений: 785
10.09.2017, 01:13 4
hoggy, я вот понял в чем суть проблемы, но не могу понять как трактует этот код компилятор.
C++
1
cout << "Корней: "
Вот мы добавили в поток "Корней", потом
C++
1
<< (d > 0)
добавили в поток 1 ( результат выражения ). А дальше с вот этим:
C++
1
? "2" : (d == 0) ? "1" : "0";
что происходит?

Добавлено через 2 минуты
На мысль приходит только, что после
C++
1
cout << "Корней: " << (d > 0);
вернется объект cout, который будет учавствовать в выражении:
C++
1
cout ? "2" : (d == 0) ? "1" : "0"
Добавлено через 41 секунду
Все, понял.
0
Эксперт С++
8426 / 4099 / 894
Регистрация: 15.11.2014
Сообщений: 9,201
10.09.2017, 01:17 5
Цитата Сообщение от Captain Maxee Посмотреть сообщение
как трактует этот код компилятор.
вычисляет сначала все выражение:
Цитата Сообщение от Никита Однороб Посмотреть сообщение
cout << "Корней: " << (d > 0)
и затем уже к полученному результату применяет тернарный ?

то бишь:
(cout << "Корней: " << (d > 0)) ? "2" : (d == 0) ? "1" : "0";
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2017, 01:17

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

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

Тернарный оператор: возврат значения
Приветствую. При компиляции ниже приведенного кода bool MyFunc() { bool flag = false; //...

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


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

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

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