|
|
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 |
|