Salta ai contenuti
Manuale LogoManuale Logo

break e continue

Durante lo scorrimento di una lista puoi dover interrompere la ricerca oppure saltare alcuni elementi.

break e continue controllano il passaggio da un’iterazione alla successiva.

break interrompe immediatamente il ciclo. L’esecuzione continua con la prima istruzione dopo il ciclo, come se il ciclo fosse finito.

for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // usciamo quando i vale 5
}
cout << i << " ";
}
cout << "fine";
// Output: 0 1 2 3 4 fine

Il caso più comune: cercare qualcosa in una lista. Appena lo trovi, non ha senso continuare a cercare:

int numeri[] = {10, 25, 3, 47, 8, 15};
int dimensione = 6;
int daQuerare = 47;
bool trovato = false;
for (int i = 0; i < dimensione; i++) {
if (numeri[i] == daQuerare) {
cout << "Trovato " << daQuerare << " alla posizione " << i << endl;
trovato = true;
break; // trovato! inutile continuare a cercare
}
}
if (!trovato) {
cout << daQuerare << " non trovato." << endl;
}

break esce solo dal ciclo più interno in cui si trova. Il ciclo esterno continua normalmente:

for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) {
break; // esce solo dal ciclo interno (j)
}
cout << "(" << i << "," << j << ") ";
}
cout << endl;
}

Output:

(0,0)
(1,0)
(2,0)

continue non esce dal ciclo. Salta solo il resto del blocco corrente e passa direttamente alla prossima iterazione.

for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // se il numero è pari, saltiamo questa iterazione
}
cout << i << " "; // stampiamo solo i dispari
}
// Output: 1 3 5 7 9

Utile per saltare certi casi senza dover annidare tutto il codice dentro un if:

// Stampa solo i numeri non divisibili per 3
for (int i = 1; i <= 20; i++) {
if (i % 3 == 0) {
continue; // saltiamo i multipli di 3
}
cout << i << " ";
}
// Output: 1 2 4 5 7 8 10 11 13 14 16 17 19 20

Un altro esempio: ignorare i dati non validi e continuare con quelli validi:

int voti[] = {8, -1, 7, 150, 6, 9};
int n = 6;
int somma = 0;
int contatore = 0;
for (int i = 0; i < n; i++) {
if (voti[i] < 0 || voti[i] > 10) {
cout << "Voto non valido ignorato: " << voti[i] << endl;
continue; // saltiamo questo voto e passiamo al prossimo
}
somma += voti[i];
contatore++;
}
if (contatore > 0) {
cout << "Media voti validi: " << (double)somma / contatore << endl;
}

Funzionano allo stesso modo anche in while e do...while:

// Ciclo "infinito" controllato da break
int i = 0;
while (true) {
if (i >= 5) {
break; // uscita manuale dal ciclo
}
cout << i << " ";
i++;
}
// Output: 0 1 2 3 4
int i = 0;
while (i < 10) {
i++;
if (i == 5) {
continue; // salta il 5
}
cout << i << " ";
}
// Output: 1 2 3 4 6 7 8 9 10
  • Usa break e continue con moderazione. Troppi rendono il codice difficile da seguire.
  • Se un ciclo ha molti break, potrebbe essere riscrivibile con una condizione più precisa:
// Con break (meno chiaro)
for (int i = 0; i < 100; i++) {
if (i * i > 50) {
break;
}
cout << i << " ";
}
// Alternativa più chiara: la condizione di uscita è nella testa del for
for (int i = 0; i < 100 && i * i <= 50; i++) {
cout << i << " ";
}
  • Se usi break o continue per un motivo non ovvio, aggiungi un commento che spiega il perché.