Condizione nei cicli
In laboratorio ci è stato assegnato un esercizio riguardante la criptazione di file di testo, e ad un certo punto del programma ho inserito il seguente codice:
do{
printf("\nDigitare 0 per decriptare un file di testo, 1 per criptarlo...");
scanf("%d",&i);
}while ((i!=0)||(i!=1));
dove i è una variabile di tipo int.
Questa parte di codice da sempre luogo a loop infiniti e altri problemi.
La condizione per rimanere all'interno del ciclo do
-while
e` ''i
diverso da 0 OPPURE i diverso da 1''. Ovvero, si rimane all'interno del
ciclo se una delle due sotto-condizioni e` vera.
- Se i=0, allora la sotto-condizione
i!=0
e` falsa, pero`i!=1
e` vera, quindi la condizione nel suo complesso e` vera e si rimane all'interno del ciclo. - Se i=1, allora
i!=0
e` vera, quindi si rimane nel ciclo. - Se i e` diverso sia da 0 che da 1, entrambe le sotto-condizioni sono vere, quindi nel suo complesso la condizione e` vera, quindi si rimane nel ciclo.
Quindi indipendentemente da quello che inserisce l'utente, si rimane
sempre nel ciclo. L'errore sta nell'uso dell'OR ||
. Si dovrebbe restare
all'interno del ciclo se e` vera la prima condizione E
contemporaneamente e` vera anche la seconda (cioe` se il numero
inserito e` diverso sia da 0 sia da 1).