Wątek przeniesiony 2014-03-19 17:10 z C/C++ przez ŁF.

wychodzenie z pętli

0

witam, jak w temacie mam pytanie czy da się wyjść z 10 pętli na raz używając jednego polecenia(coś jak break), nie używająć goto?

edit: mam na myśli zagnieżdżoną pętlę :)

no na przykład mam tablice 10 wymiarową i ją przeszukuje pętlami for i jak wartość zostanie znaleziona to chcę wyjść z pętli, żeby nie szukał do końca i wygodne by było mieć break wychodzący ze wszystkich pętli :)

0

Jednym z rozwiązań może być umieszczenie przed pętlami try, w momencie w którym chcesz wyjść rzucić wyjątek i złapać go za pętlami.

try{
  for..
    for ..
      throw wyjatek;
}
catch(...){
  ....
}
1

return - wychodzisz z całej funkcji, ale fakt, masz zepsuty algorytm jeśli coś takiego masz.

0

Do tego służy właśnie goto, a jak cię tak bardzo to swędzi, to wyciągnij całą pętlę do osobnej funkcji i użyj return.

Wyjątki służą do obsługi sytuacji wyjątkowych (błędów) i w normalnie działającym programie nie powinno być żadnego.

0
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

main()
{
    srand( time( NULL ) );
    int N=10;
    int tab[N][N][N][N][N];
    for(int i=0;i<N;++i)
        for(int j=0;j<N;++j)
            for(int k=0;k<N;++k)
                for(int l=0;l<N;++l)
                    for(int m=0;m<N;++m)
                        {
                            tab[i][j][k][l][m]=rand()%1000;
                        }
    for(int i=0;i<N;++i)
        for(int j=0;j<N;++j)
            for(int k=0;k<N;++k)
                for(int l=0;l<N;++l)
                    for(int m=0;m<N;++m)
                        {
                            if(10==tab[i][j][k][l][m])
                            {
                                cout<<"\nposzukiwany element znajduje sie w tab["<<i<<"]["<<j<<"]["<<k<<"]["<<l<<"]["<<m<<"]";
                                //tu chcialbym dac ten break
                            }
                        }

}
1

wstaw tam: return 0;
lub: i=j=k=l=m=N;

0

dziękuję Dragon właśnie o coś takiego mi chodziło :)

4

Z tym że jak już ci powiedziano - to jest skopany projekt.
Zastanów się nad:

const size_t N=10;
int tab[N*N*N*N*N];
for(int i=0;i<N*N*N*N*N;++i) tab[i]=rand()%1000;
for(int i=0;i<N*N*N*N*N;++i)
  {
   if(tab[i]==10)
     {
      cout<<"poszukiwany element znajduje sie w tab["<<(i/N*N*N*N)<<"]["<<(i/N*N*N)%N<<"]["<<(i/N*N)%N<<"]["<<(i/N)%N<<"]["<<i%N<<"]"<<endl;
      break;
     }
  }

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