pytanie odnośnie instrukcji break

0

Słuchajcie tak na szybko mam jedno krótkie pytanko.
Załóżmy że mamy:

  a = 10;
  b = 0;
  while (1)
  {
      while (1)
      {
          if (a>b)
          {
              b++;
          }
          else
              break;
      }
  }

Pytanie brzmi którego while'a przerwie po dziesięciu iteracjach break , sądziłbym że przerwie aktualnie wykonywaną pętlę czyli wewnętrznego while, ale moje pytanie brzmi również czy jeśli tak, to czy jest jakaś sprytna instrukcja przerywająca wykonywanie także i tej zewnętrznej pętli wówczas gdy ten wewnętrzny warunek mi się nie sprawdzi ?
To tylko program testowy, ale czasem potrzebuję w swoich programach takiej instrukcji a nie chcę stosować dodatkowych flag zapamiętujących...

0

Tak w skrócie: http://ideone.com/xunMEJ
Użyj zmiennej zamiast tej jedynki. Bez niej raczej się nie obejdzie, a while(true) jest trochę... brzydkie.

1

Wywal te pętle do osobnej funkcji to będziesz mógł przerwać returnem.
Jak zacząłem się uczyć C++ to miałem identyczną zagwozdkę, i wtedy nie znalazłem niczego o opisanej funkcjonalności oprócz goto. Teraz natomiast nie pamiętam kiedy ostatnim razem miałem ten problem. Po prostu jak dzielisz kod na odpowiednie kawałki to taka podwójna pętla prawie naturalnie wędruje do jakiejś osobnej funkcji.

1

break wychodzi z najbliższego do...while / while / for / switch (https://msdn.microsoft.com/en-us/library/wt88dxx6(VS.80).aspx).
W C przejdzie jeszcze użycie goto.
W C++ jest jeszcze jedna możliwość. Rzucenie wyjątku:

 try {
    for(int i=0; i<10; ++i) {
        for(int j=0; j<10; ++j) {
            if(i*j == 42)
                throw 0;
        }
    }
}
catch(int e) {}

Ale raczej traktowałbym to jako ciekawostkę, niż próbę rozwiązania problemu.

0

Panowie dziękuję.
Pozdrawiam serdecznie!

0

Nie widzę niczego złego w użyciu GOTO w takiej sytuacji, odpowiednia instrukcja, odpowiednio skompilowana do 1 jump-a w odpowiednim miejscu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1