Quando si utilizzano in C++ più costrutti if-else nidificati, occorre sempre essere sicuri dell'azione else che verrà associata ad un determinato if. Vediamo cosa accade nell'esempio seguente:
if(temperatura < 20) if(temperatura < 10) cout << "Metti il cappotto!n"; else cout << " Basta mettere una felpa";
Come si vede, il codice non è allineato in maniera ben leggibile ed è facile che il programmatore poco esperto possa confonderne il flusso di esecuzione, non capendo bene a quale istruzione if fa riferimento l'istruzione else finale.
La regola base, in questi casi, dice che un'istruzione else è sempre riferita all'ultima istruzione if che compare nel codice. Ma, è bene non confondersi troppo le idee utilizzando tale regola, poichè ci sono casi in cui appaiono tante istruzioni if-else annidate con la conseguenza che la lettura del codice sarebbe davvero difficile per chiunque.
Per rendere il codice leggibile e per confondersi il meno possibile, è buona norma fare uso sempre delle parentesi graffe e dell'indentazione del codice.
Indentare il codice significa inserire degli spazi prima della scrittura di una riga in modo da facilitarne la comprensione e la leggibilità. L'esempio precedente, indentato e corretto con l'uso delle parentesi diventa:
if(temperatura < 20) { if(temperatura < 10) { cout << "Metti il cappotto!"; } else { cout << " Basta mettere una felpa"; } }
Oppure, per chi ama le forme abbreviate (ma più insidiose):
if(temperatura < 20) if(temperatura < 10) cout << "Metti il cappotto!"; else cout << "Basta mettere una felpa";
Ora è decisamente più comprensibile. Adesso, infatti, diventa chiaro che l'istruzione else
è riferita alla istruzione if(temperatura < 10)
.