|
Le condizioni perché un blocco sia eseguito a scapito di un altro possono essere complicate if(A > 0) { if(B > 0) // if(A > 0 && B > 0) { istr11; istr12; ... } else // if(A > 0 && B <= 0) { istr21; istr22; ... } } else // if(A <= 0) { istr31; istr32; ... } 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 allora è necessario aggiungere le parentesi graffe if(A > 0) { if(B > 0) // if(A > 0 && B > 0) { istr11; istr12; ... } } else // if(A <= 0) { istr21; istr22; ... } In Basic il problema non sussiste perché le etichette END IF specificano, se usate correttamente, la chiusura o meno dell'IF. IF (A > 0) THEN IF (B > 0) THEN istr11 istr12 ... END IF ELSE istr21 istr22 ... END IF è diverso da IF (A > 0) THEN IF(B > 0) THEN istr11; istr12; ... ELSE istr21; istr22; ... END IF END IF |
|