Originariamente inviato da marjuano
ho effettuato la correzione del diverso, e va bene, ma come da te previsto non esegue alcun ciclo.
No, a dire il vero io avevo previsto che non venisse eseguito alcun ciclo proprio a causa di quell'errore, ma una volta corretto il programma dovrebbe funzionare correttamente (dove con "correttamente" intendo eseguire le istruzioni che ci sono, a prescindere dal fatto che l'output sia o non sia quello che ti aspetti).

Originariamente inviato da marjuano
inoltre, sarà per la mia ignoranza, ma di quello che hai detto non ci ho capito molto...
sicuramente la mia spiegazione non è stata molto chiara (anzi a rileggere non è nemmeno proprio esatta) ma in ogni caso il problema è comunque evidente quindi ti consiglio di rivederti gli aspetti del linguaggio C relativi ai costrutti di controllo, operatori logici, relazionali ecc... in ogni caso, cerco di spiegarmi meglio:

una volta compilato e lanciato il programma, il tuo calcolatore si ritrova con un bel codice binario da eseguire istruzione per istruzione, e così lui inizia dalla prima fino a che non arriva a questa:

codice:
if((risp=!1)&&(risp=!2)&&(risp=!3))
al che fa quanto segue (tralasciando le operazioni elementari a livello macchina): alla variabile "risp" assegna il valore "!1", cioè il negato di 1; il negato di 1 (così come di qualsiasi altro valore diverso da 0) è 0, quindi a risp viene assegnato 0. A questo punto, il risultato di quella istruzione viene testato come condizione e, essendo 0 il suo valore, il calcolatore non passa nemmeno a testare le altre perché essendo 0 la prima se ne frega di quale sia il valore delle altre visto che sono legate logicamente in AND e non esegue il corpo dell'if. Tuttavia, pur non eseguendo il corpo dell'if, ora la tua variabile risp si trova con valore 0, qualunque fosse il valore che tu inizialmente avevi immesso da tastiera. E' ovvio quindi che nessuna delle condizioni degli if successivi, e cioè

codice:
 if(risp==1)
 ...    
 if(risp==2)
 ...   
 if(risp==3)
risulterà vera, appunto perché essendo risp 0 questa non vale né 1, né 2 né 3. Quello che volevi scrivere tu è questo:

codice:
if ( risp != 1 && risp != 2 && risp != 3 )
Ora, a quanto hai detto, hai apportato questa correzione ma dici che ancora non va bene. A questo punto posta il codice corretto e dici perché non va.

Tieni presente che ci sono comunque alcune cose poco logiche: ad esempio con l'if di cui sopra tu controlli che il valore di risp sia uno tra 1, 2 e 3. Ma se non è così? In pratica non fai altro che stampare un messaggio di errore ma poi il programma continua...