iMarco92FI Inviato 19 Febbraio 2013 Segnala Condividi Inviato 19 Febbraio 2013 Buon giorno a tutti. Mi sto esercitando scrivendo programmini basilari in C per dare un esame dopodomani, e per verificare il funzionamento di While e Do-while ho compilato un programmino imbarazzante, proprio per mettere in luce delle discrepanze tra il codice scritto e l'effettivo funzionamento dell'eseguibile... Il codice sorgente è semplicemente questo: #include <stdio.h> int main() { int var=0; while (var!=5) { printf("riprova"); scanf ("%d\n",&var); } return 0; } Penso che vi offenderei se mi metto a scrivere anche quello che dovrebbe fare... comunque una volta eseguito ottengo questo: riprova4 3 riprova2 riprova6 riprova8 riprova213 riprova5 riprova1 Come potete vedere il programma non si arresta appena riceve il valore 5, ma si ferma alla iterazione successiva. Inoltre nella seconda riga il programma "si dimentica" di eseguire printf().... Ho provato con Xcode e con Clang, e i risultati sono identici... e non riesco a capire come mai... Qualche idea? Questo dubbio è nato mentre facevo gli esercizi di compiti passati, tra i quali uno chiede: "Si definisca una funzione c che riceve da tastiera valori interi fino a quando la somma degli ultimi due valori inseriti è divisibile per il terzultimo valore inserito." e la relativa soluzione proposta dalla prof è la seguente: void trap(){ int third_last, second_last, last; scanf("%d", &second_last); scanf("%d", &last); do{ third_last=second_last; second_last=last; scanf("%d", &last); }while((last+second_last)%third_last==0); } La soluzione in per se è ok, se non per la guardia dell'iterazione do-while, che per quanto ne sapevo se risulta vera l'esecuzione del programma ritorna a "do", mentre se è falsa il controllo viene passato alla istruzione successiva, che qua non c'è, quindi termina il programma. In questo caso, al contrario, se la guardia risulta falsa, il programma termina e la condizione dell'esercizio non è verificata... quindi qualcosa non mi torna... Ma il problema è che è gia il terzo esercizio che trovo con lo stesso errore... Se potete chiarire anche questo mio dubbio vi sarei infinitamente grato. MacBook Pro 8,2 13,3" | 8 GB DDR3 1600 MHz; SSD OWC Mercury Pro 6G Link al commento Condividi su altri siti Altre opzioni di condivisione...
Beta.91 Inviato 19 Febbraio 2013 Segnala Condividi Inviato 19 Febbraio 2013 Ora spiegami perché hai messo l'escape \n in uno scanf toglilo, ti "sporca" l'input  MacBook 7.1 - SanDisk Extreme 120GB SSD - 8GB RAM - OSX Mavericks -  iPhone 5S 32GB -  iPad 4 16GB[. ] Patience left: 5% Link al commento Condividi su altri siti Altre opzioni di condivisione...
iMarco92FI Inviato 19 Febbraio 2013 Autore Segnala Condividi Inviato 19 Febbraio 2013 Hai ragione... che bischero... MacBook Pro 8,2 13,3" | 8 GB DDR3 1600 MHz; SSD OWC Mercury Pro 6G Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.