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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2011, 20:34   #1
Just Be
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 11
По умолчанию Вложенные операторы if

Допустим,такой код:
Код:
if ( 1 )
  if( 2 )
      оператор 1;
  else
      оператор 2;
else
  оператор 3;
Какой else к какому if здесь относится?По какому принципу строятся вложенные if?
Не могу понять логику,помогите плз )
Just Be вне форума Ответить с цитированием
Старый 25.07.2011, 20:40   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

else относится к близжайшему if, у которого еще нету else. в твоем коде все однозначно. первый else ко 2 if, второй else к первому if
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 25.07.2011, 21:17   #3
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

И вообще, всегда используйте скобки.

Код:
if (1) {
  if (2) {
      оператор 1;
  } else {
      оператор 2;
  }
} else {
  оператор 3;
}
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 25.07.2011, 21:47   #4
Just Be
Пользователь
 
Регистрация: 25.07.2011
Сообщений: 11
По умолчанию

Цитата:
else относится к близжайшему if, у которого еще нету else. в твоем коде все однозначно. первый else ко 2 if, второй else к первому if
Спасибо,уяснил )
Код:
И вообще, всегда используйте скобки.
Спасибо,не дочитал еще до этого момента

И еще один вопрос.
Switch,как я понял,альтернатива if?Если да,то что лучше использовать?Или они не взаимозаменяемы,у каждого свои приемущества и недостатки?

Последний раз редактировалось Just Be; 25.07.2011 в 21:53.
Just Be вне форума Ответить с цитированием
Старый 25.07.2011, 22:25   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Obey-Kun
Цитата:
И вообще, всегда используйте скобки.
совсем необязательно. куда лучше переписать как нить так
Код:
if (1 && 2)
    operator 1;
else if (1)
    operator 2;
else
    operator 3;
конечно не всегда лучше именно так, зависит от конкретного условия
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 25.07.2011, 22:51   #6
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Цитата:
И вообще, всегда используйте скобки.
Дело вкуса, местами наглядность ничем не отличается от if { }
coNsept вне форума Ответить с цитированием
Старый 25.07.2011, 23:58   #7
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2Obey-Kun

совсем необязательно. куда лучше переписать как нить так
Код:
if (1 && 2)
    operator 1;
else if (1)
    operator 2;
else
    operator 3;
конечно не всегда лучше именно так, зависит от конкретного условия
Ага, а потом при развитии программы дописать одну строку:

Код:
if (1 && 2)
    operator 1;
else if (1)
    operator 2;
else
    operator 3;
    operator 4;
И удивляться, почему оно неправильно работает. Практически во всех Coding Conventions просят всегда использовать фигурные скобки. Прочее чревато ошибками.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 26.07.2011, 00:26   #8
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Obey-Kun
а чему удивляться то. вполне определенное поведение. думать же надо, что и куда дописываешь

Цитата:
Практически во всех Coding Conventions просят всегда использовать фигурные скобки
на k&r стиль посмотри. на исходники git, mpd, pidgin (libpurple).
нет смысла писать
Код:
if (1) {

} else {

}
как и нет смысла писать
Код:
if (1) {
...
}
в более сложных условиях естественно можно и поставить "лишний" блок, чтобы повысить удобочитаемость. а так, зачем лишний раз захламлять код? и да, в большинстве случаев, если имеем однострочный if/else, то его можно заменить тернарным оператором

Цитата:
Прочее чревато ошибками.
вот признаюсь, за 3 года работы ни разу не было ошибок на этой почве.

ты даже свой и мой пример сравни
Код:
if (1) {
  if (2) {
      оператор 1;
  } else {
      оператор 2;
  }
} else {
  оператор 3;
}
Код:

if (1 && 2)
    operator 1;
else if (1)
    operator 2;
else
    operator 3;
что проще читается?

даже вон, в кутешных семплах не ставят они лишние блоки подозреваю, что в коде тоже
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 26.07.2011 в 00:40.
pproger вне форума Ответить с цитированием
Старый 26.07.2011, 01:34   #9
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Да, попутал я. Это в KDE Conding Conventions так просят. А в Qt — совсем нет. http://developer.qt.nokia.com/wiki/Qt_Coding_Style

Так что дело вкуса.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 26.07.2011, 08:59   #10
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Just Be Посмотреть сообщение
И еще один вопрос.
Switch,как я понял,альтернатива if?Если да,то что лучше использовать?Или они не взаимозаменяемы,у каждого свои приемущества и недостатки?
По большому счёту, if - это оператор условия, а switch - оператор альтернатив.
В некоторых случаях их можно заменять (но не во всех).
Например:

Код:
if(a == 1) {...;}
else if(a == 2) {...;}
else if(a == 3) {...;}
Можно заменить на
Код:
switch(a)
{
  case 1 : {...;break;}
  case 2 : {...;break;}
  case 3 : {...;break;}
}
А такой код
Код:
if(a >= 1 && a < 2) {...;}
if(a >= 2 && a <3)    {...;}
На switch заменить нельзя.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вложенные запросы java_91 SQL, базы данных 1 07.07.2011 18:52
Вложенные подзапросы FACE OFF Помощь студентам 2 04.11.2010 12:53
Вложенные циклы kex Помощь студентам 2 11.10.2010 18:25
С++ вложенные структуры Bumbuk Помощь студентам 2 18.06.2010 21:51