Break in cicli annidati
Supponiamo di avere una matrice a di dimensioni mxn. Voglio le coordinate del primo elemento nullo. Potrei fare:
e così avrei memorizzato le coordinate.
Se invece non volessi usare i due tmp, e quindi salvare il valore in i,j... come dovrei fare?
Se metto un break mi esce solo dal ciclo più interno... grazie
int i,j; int tmp1,tmp2; for (i=0;i<m;i++) for (j=0;j<n;j++) if (a[i][j]==0) { tmp1=i; tmp2=j; }
e così avrei memorizzato le coordinate.
Se invece non volessi usare i due tmp, e quindi salvare il valore in i,j... come dovrei fare?
Se metto un break mi esce solo dal ciclo più interno... grazie
Risposte
Potresti usare un goto, ma è spesso meglio evitare. In alternativa puoi utilizzare un qualche tipo di flag che setti quando incontri il primo elemento non nullo e lo usi per uscire dai cicli.
io per il momento sono andato di "ignoranza"... è proprio da evitare secondo te?
[code]
i=10;
j=10;
[code]
[code]
i=10;
j=10;
[code]
Non ho capito che cosa dovrebbe fare quel codice..
Io userei un flag e metterei due break condizionali in entrambi i cicli for ... cosi dovrebbe funzionare !
EDIT : volendo funzionerebbe anche senza flag, ma ripetendo la condizione.
EDIT : volendo funzionerebbe anche senza flag, ma ripetendo la condizione.
"apatriarca":
Non ho capito che cosa dovrebbe fare quel codice..
io facevo
for (i=0;i<n;i++) for (j=0;j<n;j++) if (a[i][j]==0) { tmp1=i; tmp2=j; i=10; j=10; }
per uscire dal doppio ciclo
Però se voglio evitare di usare i tmp non posso
Suppongo che nella tua soluzione n sia minore o uguale a 10. Puoi seguire una delle seguenti strade:
Immagino sia possibile farlo anche in altri modi, ma suppongo siano sufficienti per ora.
// Soluzione 1 for (i = 0; i < n; ++i) { for (j = 0; j < n; ++j) { if (a[i][j] == 0) { goto fineciclo; } } } fineciclo: /* .. codice post ciclo .. */ // Soluzione 2 i = j = 0; while (i < n && a[i][j] != 0) { if (++j >= n) { j = 0; ++i; } } // Soluzione 3 (se non puoi usare bool va bene anche un int inizializzato in modo opportuno) bool running = true; for (i = 0; i < n && running; ++i) { for (j = 0; j < n; ++j) { if (a[i][j] == 0) { running = false; break; } } }
Immagino sia possibile farlo anche in altri modi, ma suppongo siano sufficienti per ora.