Istruzioni di controllo
Si chiamano "istruzioni di controllo" in C++ (come in C) quelle istruzioni che modificano l'esecuzione sequenziale di un programma.
Istruzione di controllo if
Sintassi:
if (condizione) istruzione;
(dove condizione é un'espressione logica) se la condizione é true il programma esegue l'istruzione, altrimenti passa direttamente all'istruzione successiva
Nel caso di due scelte alternative, all'istruzione if si può associare l'istruzione else :
if (condizione) istruzioneA;
else istruzioneB;se la condizione é true il programma esegue l'istruzioneA,
altrimenti esegue l'istruzioneB
Se le istruzioni da eseguire in base alla condizione sono più di una, bisogna creare un ambito, cioè raggruppare le istruzioni fra parentesi graffe:
if (condizione) { ....... blocco di istruzioni ...... }
e analogamente:
else { ....... blocco di istruzioni ...... }
Se l'istruzione controllata da un if consiste a sua volta in un altro if (sono possibili più istruzioni if "innestate"), ogni eventuale else si riferisce sempre all'if immediatamente superiore (in assenza di parentesi graffe).
Es. if (cond1) if (cond2) istr1; else istr2;
(istr2 é eseguita se cond1 é true e cond2 é false)Invece: if (cond1) { if (cond2) istr1;} else istr2;
(istr2 é eseguita se cond1 é false, indipendentemente da cond2).Per essere sicuri di ottenere quello che si vuole, mettere sempre le parentesi graffe, anche se sono ridondanti, e quindi il primo caso è equivalente (ma più chiaro) se si scrive:
if (cond1) { if (cond2) istr1; else istr2; }
Istruzione di controllo while
Sintassi:
while (condizione) istruzione;
(dove condizione é un'espressione logica) il programma esegue ripetutamente l'istruzione finchè la condizione é true e passa all'istruzione successiva appena la condizione diventa false.
Ovviamente, affinché il loop (ciclo) non si ripeta all'infinito, l'istruzione deve modificare qualche parametro della condizione.
Se le istruzioni da eseguire in base alla condizione sono più di una, bisogna creare un ambito, cioè raggruppare le istruzioni fra parentesi graffe:
while (condizione) { ....... blocco di istruzioni ...... }
La condizione viene verificata all'inizio di ogni iterazione del ciclo: é pertanto possibile, se la condizione é già inizialmente false, che il ciclo non venga eseguito neppure una volta.
E' ammessa anche la forma: while (condizione) ;
in questo caso, per evitare un loop infinito, la condizione deve essere in grado di automodificarsi.
Istruzione di controllo do ... while
Sintassi:
do { ... blocco di istruzioni ... } while ( condizione ) ;
(dove condizione é un'espressione logica) funziona come l'istruzione while, con la differenza che la condizione é verificata alla fine di ogni iterazione e pertanto il ciclo é sempre eseguito almeno una volta. Se la condizione é true il programma torna all'inizio del ciclo ed esegue una nuova iterazione, se é false, passa all'istruzione successiva. Le parentesi graffe sono obbligatorie, anche se il blocco è costituito da una sola istruzione.
Istruzione di controllo for
Sintassi:
for (inizializzazione; condizione; modifica) istruzione;
(dove inizializzazione é un'espressione eseguita solo la prima volta, condizione é un'espressione logica, modifica é un'espressione eseguita alla fine di ogni iterazione) il programma esegue ripetutamente l'istruzione finchè la condizione é true e passa all'istruzione successiva appena la condizione diventa false.
Se le istruzioni da eseguire in base alla condizione sono più di una, bisogna creare un ambito, cioè raggruppare le istruzioni fra parentesi graffe:
for (inizializzazione; condizione; modifica)
{ ....... blocco di istruzioni ...... }
L'istruzione for é simile all'istruzione while, con le differenze che in while l'inizializzazione é impostata precedentemente e la modifica é eseguita all'interno del blocco di istruzioni del ciclo. Come in while, anche in for la condizione viene verificata all'inizio di ogni iterazione.
Esempio (confronto fra for e while):
int conta; int conta=0; for (conta=0; conta<10; conta+=2) while (conta<10) cout << conta << '\n' ; { cout << conta << '\n' ; conta+=2; }
Tutte le parti di un'istruzione for sono opzionali; al limite anche l'istruzione:
for (;;) ; (loop infinito)
é sintatticamente valida (anche se poco "pratica"!); infatti, se non specificata, la condizione é di default true.
Istruzioni continue, break e goto
Le istruzioni continue e break sono utilizzate all'interno di un blocco di istruzioni controllate da while, do ... while o for.
L'istruzione continue interrompe l'iterazione corrente del ciclo: il programma riprende dall'inizio dell'iterazione successiva, previa esecuzione della modifica (nei cicli for) e verifica della condizione (in tutti i tipi di cicli).
L'istruzione break interrompe completamente un ciclo: il programma riprende dalla prima istruzione successiva a quelle del ciclo.
Nel caso di più cicli innestati, le istruzioni continue e break hanno effetto esclusivamente sul ciclo a cui appartengono e non su quelli più esterni.
Il C++ mantiene la "vecchia" istruzione goto :
goto identificatore;
............................
............................
identificatore: istruzione;il flusso del programma "salta" direttamente all'istruzione labellata (etichettata) identificatore.
L'istruzione goto ha pochi utilizzi nella normale programmazione ad alto livello. Può essere importante nei rari casi in cui è richiesta la massima efficienza (per esempio in applicazioni in tempo reale), oppure per uscire direttamente dal più interno di diversi cicli innestati.
Istruzione di controllo switch ... case
Sintassi (le parti fra parentesi quadra sono opzionali):
switch( espressione )
{
[case costante1 : [ blocco di istruzioni 1]]
[case costante2 : [ blocco di istruzioni 2]]
..............
[default : [blocco di istruzioni]]
}
L'istruzione switch confronta il valore dell'espressione (che deve restituire un risultato intero) con le diverse costanti (dello stesso tipo dell'espressione) e, appena ne trova una uguale, esegue tutte le istruzioni da quel punto in poi (anche se le istruzioni relative allo stesso case sono più d'una, non è necessario inserirle fra parentesi graffe). Se nessuna costante é uguale al valore dell'espressione, esegue, se esistono, le istruzioni dopo default:
Per ottenere che le istruzioni selezionate siano eseguite in alternativa alle altre, bisogna inserire alla fine del corrispondente blocco l'istruzione break