Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема висящего else, проблема висящего else 
:(
    Опции темы
danilkramatorsk
Дата 17.1.2013, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 22.12.2012

Репутация: нет
Всего: нет



посоветуйте пожалуйста где об этом можно более подробно почитать или сами расскажите)
PM MAIL   Вверх
feodorv
Дата 17.1.2013, 02:18 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата

Оператор if имеет две формы:
if(выражение) оператор1;
и
if(выражение)
  оператор1;
else
  оператор2;


Если в результате вычисления значения выражения получено значение "истина" (ненулевое значение), то в обоих формах оператора if выполняется оператор1. Если вычисленное значение выражения равно значению "ложь" (нулевое), тогда выполнение оператора if, представленного в первой форме, заканчивается, а в операторе, имеющем вторую форму, выполняется оператор 2.

Совместное использование обеих форм оператора if приводит к неоднозначности, называемой "проблемой висящего else".

Например, вложенный оператор if
if(e1)   if( e2) оператор1; else оператор2;
может быть интерпретирован как
if(e1) {
  if(e2)
    оператор1;
  else
    оператор2; }

или как
if(e1)
  { if(e2) оператор1; }
else
  оператор2;

Эта неоднозначность разрешается в языке Си с помощью правила, в соответствии с которым часть else оператора всегда относится к синтаксически самому правому, игнорируя любые отступы, оператору if без части else. Следовательно, первая интерпретация является интерпретацией, принятой в языке Си.



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
NoviceF
Дата 18.1.2013, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: 2
Всего: 2



danilkramatorsk, вот как раз примерчик из соседней темы:

Код

int max_otr (int *x, size_t n) {
  int r=0;
  if (n > 0) {
    r=max_otr(x+1, n-1); 
    if (*x < 0)
      if (r < 0)
        r=std::max (*x, r);
      else
        r=*x;
  }
  return r;
}


http://forum.vingrad.ru/index.php?showtopi...t&p=2542951

заодно можешь сломать мозг, пытаясь понять, как работает эта функция  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.