Jump to content
    

"break to out" from for/switch

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

 

1 minute ago, jcxz said:

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

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

Share this post


Link to post
Share on other sites

9 minutes ago, aaarrr said:

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

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

Share this post


Link to post
Share on other sites

Не совсем ясен смысл такого паровоза. Судя по коду цель - выполнить цепочку этапов и если условие текущего выполняется, перейти к следующему. Как по мне тут явно 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);   

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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;
...
}

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

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

 

Edited by sunjob

Share this post


Link to post
Share on other sites

Здесь или 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

 

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...