Alternativa ciondolante
Si tratta di un errore che si può commettere annidando le selezioni.
Considera il diagramma di flusso

e le codifiche corrispondenti
| Basic | Pascal | C | |
|---|---|---|---|
|
SE(A > 0) ALLORA
SE(B > 0) ALLORA INIZIO Istr11 Istr12 FINE ALTRIMENTI INIZIO Istr21 Istr22 FINE |
IF(A > 0) THEN
IF(B > 0) THEN Istr11 Istr12 ELSE Istr21 Istr22 END IF END IF |
If A > 0 Then
Begin If B > 0 Then Begin Istr11; Istr12; End Else Begin Istr21; Istr22; End; End; |
if(A > 0)
{ if(B > 0) { istr11; istr12; } else { istr21; istr22; } } |
Con poche modifiche al codice
| Basic | Pascal | C | |
|---|---|---|---|
|
SE(A > 0) ALLORA
INIZIO SE(B > 0) ALLORA INIZIO Istr11 Istr12 ... FINE FINE ALTRIMENTI INIZIO Istr21 Istr22 ... FINE |
IF(A > 0) THEN
IF(B > 0) THEN Istr11 Istr12 ... END IF ELSE Istr21 Istr22 ... END IF |
If A > 0 Then
Begin If B > 0 Then Begin Istr11; Istr12; End End Else Begin Istr21; Istr22; End; |
if(A > 0)
{ if(B > 0) { istr11; istr12; } } else { istr21; istr22; } |
si realizza l'algoritmo corrispondente al diagramma di flusso

Note
- Il ramo else si sposta da una parte all'altra, ciondola.
- Nel primo caso l'else viene associato dal compilatore all'ultimo if rimasto aperto.
- Nel secondo caso l'if viene associato dal compilatore al primo if ancora aperto...
- L'uso delle etichette di apertura e chiusura dei blocchi risolve l'ambiguità.
Un programmatore principiante potrebbe erroneamente scrivere il codice seguente per riferirsi al secondo diagramma di flusso ottenendo in realtà il primo...
| Pascal | C | |
|---|---|---|
|
SE(A > 0) ALLORA
SE(B > 0) ALLORA INIZIO Istr11 Istr12 FINE ALTRIMENTI INIZIO Istr21 Istr22 FINE |
If A > 0 Then
If B > 0 Then Begin Istr11; Istr12; End Else Begin Istr21; Istr22; End; |
if(A > 0)
if(B > 0) { istr11; istr12; } else { istr21; istr22; } |
Note
- Il compilatore non prende in considerazione l'indentazione e associa l'else all'if ancora aperto...
- In Basic non è possibile sbagliare perché l'etichetta END IF è sempre presente e differenzia i due casi.
- Il programmatore principiante dovrebbe utilizzare sempre le etichette di blocco per evitare di incorrere nell'errore dell'else ciondolante.