Перейти к содержанию
    

И по поводу читаемости: goto - очевидное действие, модификация переменной цикла, набивание кода 100500 continue - костыли, механизм работы которых специально изучать надо. И таки да, легко выстрелить в ногу.

 

1 minute ago, jcxz said:

один гвоздь торчит в сторону и колет спину

Ключевое слово один - он действительно один, и назначение его очевидно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тоже очень редко пользуюсь goto именно в таких случаях. Не вижу никаких проблем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, aaarrr said:

goto - очевидное действие

А остальные - крайне неочевидные. В которых легко допустить ошибку, иногда - трудно находимую. Потому что вагон писанины.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не совсем ясен смысл такого паровоза. Судя по коду цель - выполнить цепочку этапов и если условие текущего выполняется, перейти к следующему. Как по мне тут явно for не к месту - тут скорее нужен do{}while(i)

U8 z=1,i=10
do
{
...
switch(i)
  {
  case 10:
  if()
    {
    ...
    }
  else
    {
    z=0
    }
  break;
  ...
  case 20:
  if()
    {
    ...
    }
  else
    {
    z=0
    }
  break;
  default:
    z=0
  break;
  
  }   // switch()
  i++;
} while(z);   

Если на месте первого троеточия нет кода(т.е. нет кода постоянно исполняемого в цикле), то там вообще можно обойтись без цикла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а какая разница, for() или do-while()?

выброс из цикла происходит одинаково, по установке/сбросу переменной цикла.

поясните, в 2-3х предложениях?! если только визуально do-while() приятнее, то ... ну ладно, пусть, я не против, но не вижу разницы вообще :о)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) при обработке case вообще не влезаешь в счетчик цикла

2) имеется один общий и понятный механизм завершения цикла(z=0).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

for(i=1; i<BREAK; i++)
{
...
switch(i)
  {
  case 10:
  if()
    {
    ...
    BREAK = 0; // видим слово BREAK - значить это "то, что надо"
    }
  break;
...
}

либо

#define BREAK 0

for(i=1; i<CNT; i++)
{
...
switch(i)
  {
  case 10:
  if()
    {
    ...
    CNT = BREAK; // тут вообще все очевидно :о)
    }
  break;
...
}

все то-же самое :о) за исключением что счетчик используется для выброса (мавр сделал, мавр может...)

из плюсов - ни чего не надо перехреноверчивать :о)

 

Изменено пользователем sunjob

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здесь или goto или ввести булевский флаг выхода из цикла:

bool fl_exit=false;

for(int i=0; (i<N) && !fl_exit; i++)
{switch(i)
 {case 0:
       break;
  case 1:
       break;
  case 10:
       fl_exit=true;
       break;
 }//switch
}//for

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/5/2022 at 3:01 PM, Dvorkin said:

Здесь или goto или ввести булевский флаг выхода из цикла:

 

Немного поторопились с советом - через пару недель теме как раз год бы исполнился 🙂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/6/2022 at 10:58 PM, xvr said:

Немного поторопились с советом - через пару недель теме как раз год бы исполнился 🙂

Ну, если за год никто не предложил разумного решения - значит, задача чрезвычайно трудна, нельзя было оставить без ответа 😀

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...