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