Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2009, 21:23   #1
vasyapupkin
Пользователь
 
Регистрация: 02.11.2009
Сообщений: 13
Сообщение Салют

Салют
Перехожу с паскаля на С++
Может мне кто нибудь объяснить
как работает вот эта конструкция
Сколько подборок не делал не могу врубить как она пашет...
a?d:c
vasyapupkin вне форума Ответить с цитированием
Старый 02.11.2009, 21:26   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
a ? d : c;
эквивалентно
Код:
if( a )
    d;
else
    c;
Иное дело, что условный оператор ?: можно использовать в правой части присваивания:
Код:
b = a ? d : c;
Но тем не менее смысл не меняется. Такую конструкцию можно прочесть так: Если a, то b присвоить d, иначе b присвоить c, и она будет аналогична вот такой:
Код:
if(a)
    b = d;
else
    b = c;
netrino вне форума Ответить с цитированием
Старый 02.11.2009, 21:30   #3
vasyapupkin
Пользователь
 
Регистрация: 02.11.2009
Сообщений: 13
По умолчанию

Погодь а это число как мы можем в if пихнуть просто число
или тут работают 1 и 0 (true/falshe)
vasyapupkin вне форума Ответить с цитированием
Старый 02.11.2009, 21:32   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

проще говоря читается так

Код:
это условие верно ? сделать что-то : иначе сделать другое

Последний раз редактировалось m0nax; 02.11.2009 в 21:37.
m0nax вне форума Ответить с цитированием
Старый 02.11.2009, 21:34   #5
vasyapupkin
Пользователь
 
Регистрация: 02.11.2009
Сообщений: 13
По умолчанию

ну то есть если у нас a= 1 то работает d иначе с
а если a =2
vasyapupkin вне форума Ответить с цитированием
Старый 02.11.2009, 21:39   #6
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Цитата:
a?d:c
Означает если a истинно, то d, иначе c.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 02.11.2009, 21:42   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от vasyapupkin Посмотреть сообщение
Погодь а это число как мы можем в if пихнуть просто число
или тут работают 1 и 0 (true/falshe)
Да, почти так. В C 0 - ложь, всё остальное - истина.
1, 3, -4, 112284 - истина
0 - ложь.
netrino вне форума Ответить с цитированием
Старый 02.11.2009, 21:43   #8
vasyapupkin
Пользователь
 
Регистрация: 02.11.2009
Сообщений: 13
По умолчанию

Да спасибо то я понял....
А что если a=2? тоже истина ???
Как компилироваться будет
a = d ? c = b : e = f ;
если a=d или a=d=1 ????
а потом если так то присвоить d к с а иначе e к f???
vasyapupkin вне форума Ответить с цитированием
Старый 02.11.2009, 21:45   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,085
По умолчанию

В Си изначально не было булевых переменных и вместо них использовались целочисленные переменные с макросами вроде:
#define TRUE 1
#define FALSE 0
В выражениях истинность переменной определяется по нулю. Если а == 0, значит ложь, иначе - истина.
Таким образом, 1, 2, 3, 4 - это всё истина
а ветка if (0) никогда не выполнится.
Сейчас специальный тип bool ввели, но этот механизм остался.

Надо проверять, но мне кажется, что из этого: a = d ? c = b : e = f ;
получится такое: если d != 0, то a = c = b, иначе: a = e = f

Последний раз редактировалось pu4koff; 02.11.2009 в 21:50.
pu4koff вне форума Ответить с цитированием
Старый 02.11.2009, 21:50   #10
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

a = 2 - это присваивание. То есть сначала произойдёт присваивание переменной a значения 2, после чего произойдёт проверка на истинность. Естественно, что раз a теперь равна 2, то это будет истина.
a = d ? c = b : e = f;
Если d не равно 0, то переменной c будет присвоено значение b, которое в свою очередь будет присвоено a, если же d - 0, то будет то же самое, но для e и f
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Салют на форме Rusl92 Общие вопросы Delphi 4 03.12.2008 00:16
салют в delphi ZhekON Мультимедиа в Delphi 9 17.12.2007 18:31