Salta ai contenuti. | Salta alla navigazione

Strumenti personali

Condizione nei cicli

Importante

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