![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
EvilsInterrupt |
|
||||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Есть такая ситуация, читая про С++ книгу Эккеля увидел:
что автор говорит о том, что такая строчка не работает:
но работает такая:
т.е. без скобочек. Недолго думая, тут же создал proba.cpp и действительно! Почитав пояснение, не совсем понял его. Пояснение сводится к тому что в выражениях недопустимы скобочки. Не остановился и решил поискать терминологию, а что собственно является выражением в С++ и ... пока не нашел ( Прошу, подсказать мне в чем фокус ? Почему пример, когда выделено в скобочки, не работает ? |
||||
|
|||||
_GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: нет Всего: 7 |
EvilsInterrupt, суть в том, что переменная char c видна только внутри тех скобок, где она объявлена, следовательно при сравнении на неравенство с символом 'С' слева от знакак неравенства по сути ничего нет (как только вышли из скобок переменная "потерялась"). Нормальный компилятор с лишними скобками не скомпилит.
-------------------- Дорогу осилит идущий |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
g++ не компилит.
Добавлено через 32 секунды у тебя какой компилятор? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
xvr |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
![]() Суть сводится к тому, что в while(char c=cin.get() != 'C') внутри while использованно НЕ выражение Стандарт:
Во втором же случае
|
||||||||
|
|||||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
пол-года назад я тоже задавал подобные вопросы
вот тема: http://forum.vingrad.ru/forum/topic-264505.html |
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
все равно не понял, вернусь к этому вопросу позже, спасибо за внимание ;)
|
|||
|
||||
A5uKa |
|
|||
TЋ♥s F1rȜ iƧ BurȠiƞg ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 2 Всего: 16 |
а разве get() не выполнится перед этим ? п.с. мне всегда казалось, что в этом случае сравнивается даже не значение char, а результат операции присвоения :S |
|||
|
||||
xvr |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
А чего тут непонятного? В while, if, for и пр. в качестве условия можно использовать выражение или определение переменной. В последнем случае именно значение этой переменной и становится условием. Определять переменные внутри выражения нельзя.
Запись while(char c=cin.get() != 'C') приблизительно эквивалентна такой
|
||||||||
|
|||||||||
A5uKa |
|
||||||||||
TЋ♥s F1rȜ iƧ BurȠiƞg ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 2 Всего: 16 |
Я не о том... Я просто хочу сказать, что сравнение идёт не с переменной.
присвоение происходит после сравнения. Точнее присвоения вообще НЕ происходит, при выходе из тела if или while оно вернётся и станет тем, чем было. то есть не
а
Это сообщение отредактировал(а) A5uKa - 8.1.2010, 00:09 |
||||||||||
|
|||||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
имхо с for смотрится симпатичнее :
хотя тоже не до конца соответсвует примеру.. |
|||
|
||||
A5uKa |
|
||||
TЋ♥s F1rȜ iƧ BurȠiƞg ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 2 Всего: 16 |
почему ? только не понимаю зачем вообще char переменная тут у
Ведь в условии присвоения не происходит. |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
как это не происходит ?
а нам за телом и не нужно.. мы ее внутри тела будем использовать ![]() Добавлено через 2 минуты и 24 секунды ммм.. а что Вы называете телом while ? описание или блок цикла ? Добавлено через 3 минуты и 58 секунд потому что условие/присвоение пишется один раз.. т.е. нет копи-паста.. |
|||
|
||||
A5uKa |
|
|||
TЋ♥s F1rȜ iƧ BurȠiƞg ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 2 Всего: 16 |
Только НЕ этого тела, а того, что в круглых скобках после равно То есть вообще не будем. Можете cout << c; для примера поставить... п.с. рекурсия ещё лучше :P Это сообщение отредактировал(а) A5uKa - 8.1.2010, 01:16 |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Вы имеете ввиду что
позвольте тогда узнать куда девалось выше присвоенное значение ? а также что хранит тогда сейчас c ? неужто мусор ? или может та "c" в теле цикла не существует ? _________________ | хочу подробностей | |_________________| | | ![]() |
||||
|
|||||
A5uKa |
|
||||||
TЋ♥s F1rȜ iƧ BurȠiƞg ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 1928 Регистрация: 30.8.2008 Репутация: 2 Всего: 16 |
Именно это я и хочу сказать.
Я могу соврать, если скаже, что присвоения как такового не было вообще, но я его не наблюдаю ![]()
Грязный и вонючий ![]() вот ещё пример
на самом деле сравнивается j и 5 А i вообще не при делах выводится единицой. Бурной фантазией можно предположить почему int i = (int)(bool)(5==5) но как знать ![]() p.s. ну всё ... Вы наверное уснули =) Пойду и я спать ... Это сообщение отредактировал(а) A5uKa - 8.1.2010, 02:51 |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |