|
Selezione singolaDecidere se eseguire o meno una sequenza di istruzioni if(A > 0) { istr1; istr2; ... } Decide se eseguire le istruzioni istr1 e istr2. Se si controlla l'esecuzione di una singola istruzione if(A > 0) istr1; Selezione doppiaDecidere quale eseguire tra due diverse sequenze di istruzioni if(A > 0) { istr11; istr12; ... } else // if(A <= 0) { istr21; istr22; ... } Decide se eseguire le istruzioni istr11 e istr12 oppure le istruzioni istr21 e istr22. Se viene controllata l'esecuzione di singole istruzioni if(A > 0) istr11; else // if(A <= 0) istr21; Selezione multiplaDecidere quale sequenza di istruzioni eseguire tra tante sequenze alternative if(E == E1) { istr11; istr12; ... } else if(E == E2) { istr21; istr22; ... } ... else { istrn1; istrn2; ... } Decide se eseguire le istruzioni istr11 e istr12 (se E = E1), oppure le istruzioni istr21 e istr22 (se E = E2), oppure ... oppure istrn1 e istrn2 (altrimenti). Tra l'ultimo blocco else if() e l'else finale possono essere inseriti ulteriori blocchi di tipo else if(). L'ultimo blocco else è facoltativo (quindi si può prevedere che nessun blocco sarà eseguito). Se le espressioni E, E1, E2, ... sono costanti numeriche si può tradurre il tutto in una forma più immediata switch(E) { case E1: istr11; istr12; ... break; case E2: istr21; istr22; ... break; ... default: istrn1; istrn2; ... break; } Il blocco default è facoltativo. Se in un blocco case manca l'istruzione break l'esecuzione continua con il blocco successivo. Selezioni annidateLe condizioni perché un blocco sia eseguito a scapito di un altro possono essere complicate
Un errore frequente che si commette annidando le selezioni è quello dell'else ciondolante if(A > 0) if(B > 0) // if(A > 0 && B > 0) { istr11; istr12; ... } else // if(A <= 0) ??? { istr21; istr22; ... } Il compilatore associa l'else al secondo if piuttosto che al primo! if(A > 0) if(B > 0) // if(A > 0 && B > 0) { istr11; istr12; ... } else // if(A > 0 && B <= 0) { istr21; istr22; ... } Quindi cambiare l'indentazione non basta per cambiare la valutazione da parte del compilatore! Se la valutazione voluta è la prima, è necessario aggiungere le parentesi graffe if(A > 0) { if(B > 0) // if(A > 0 && B > 0) { istr11; istr12; ... } } else // if(A <= 0) { istr21; istr22; ... } |
|