Gli operatori break e continue sono utilizzati nelle strutture cicliche (for, while, do..while) per controllare il flusso di esecuzione.
Dettagli:
break all'interno di cicli annidati uscirà solo dal ciclo più interno.goto si può influenzare la logica in modo complesso.continue nei cicli while e do..while può causare un imprevisto passaggio del flusso di controllo se non si considera l'ordine delle operazioni.Esempio:
for (int i = 0; i < 5; ++i) { if (i == 2) continue; if (i == 4) break; printf("%d ", i); } // Stamperà: 0 1 3
Come si comporterà un ciclo con l'operatore continue se utilizza espressioni complesse durante l'inizializzazione e l'aggiornamento del contatore?
Risposta errata comune:
Molti pensano che quando scatta continue, tutte le espressioni all'interno della struttura del ciclo (ad esempio, l'incremento in for) non vengano eseguite.
Risposta corretta:
Nel ciclo for, quando si raggiunge continue, viene saltata la parte rimanente del corpo del ciclo, ma l'espressione di aggiornamento del contatore (la terza parte dell'espressione in for) viene comunque eseguita:
for (int i = 0; i < 3; printf("step %d ", i), ++i) { if (i == 1) continue; printf("%d ", i); }
Uscita:
0
step 0
step 1
2
step 2
Storia
All'interno di un ciclo su un array, è stato utilizzato continue, dimenticando di aggiornare esplicitamente il parametro contatore in un ciclo while, che portava a un ciclo infinito.
Storia
Un ciclo annidato per la ricerca di corrispondenze scattava break alla prima corrispondenza, ma il programmatore si aspettava che il ciclo si interrompesse completamente, quindi il trattamento degli altri elementi non veniva eseguito correttamente.
Storia
Nella costruzione do..while, dove il ciclo principale utilizzava continue, veniva saltata un'operazione finale chiave prima di passare all'iterazione successiva, portando a una perdita di dati a causa di una modifica errata dello stato all'interno del corpo del ciclo.