Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
Salve, sto facendo un vile programmino che converte da decimale a binario.
Finita la conversione il ciclo ricomincia, ma in teoria prima dovrebbe essere premuto INVIO..solo che getchar viene completamente ignorato infatti il programma continua ad andare avanti senza mostrare il risultato..
Codice sorgente - presumibilmente Delphi |
#include <stdio.h> int main() { int num, div, i = 0, conv[32]; do { system("clear"); printf("Conversioni da decimale a binario.\n"); printf("Per terminare inserire -1.\n"); printf("Le conversioni verranno rappresentate a 32 bit."); printf("\n\nInserisci un numero: "); scanf("%d", &num); if(num>=0) { div = num; while(i<32) { conv[i] = div % 2; div /= 2; i++; } i--; printf("Il risultato della conversione è: "); while(i>=0) { printf("%d", conv[i]); i--; } printf("\n\nPremi INVIO per continuare..."); getchar(); } if(num<-1) { printf("Hai inserito un numero non valido!"); printf("\n\nPremi INVIO per continuare..."); getchar(); } } while(num!=-1); system("clear"); return 0; }
|
|
|
GuglielmoS (Ex-Member)
Pro
Messaggi: 114
Iscritto: 27/11/2009
|
Postato originariamente da Luk3:
Salve, sto facendo un vile programmino che converte da decimale a binario.
Finita la conversione il ciclo ricomincia, ma in teoria prima dovrebbe essere premuto INVIO..solo che getchar viene completamente ignorato infatti il programma continua ad andare avanti senza mostrare il risultato..
Codice sorgente - presumibilmente Delphi |
#include <stdio.h> int main() { int num, div, i = 0, conv[32]; do { system("clear"); printf("Conversioni da decimale a binario.\n"); printf("Per terminare inserire -1.\n"); printf("Le conversioni verranno rappresentate a 32 bit."); printf("\n\nInserisci un numero: "); scanf("%d", &num); if(num>=0) { div = num; while(i<32) { conv[i] = div % 2; div /= 2; i++; } i--; printf("Il risultato della conversione è: "); while(i>=0) { printf("%d", conv[i]); i--; } printf("\n\nPremi INVIO per continuare..."); getchar(); } if(num<-1) { printf("Hai inserito un numero non valido!"); printf("\n\nPremi INVIO per continuare..."); getchar(); } } while(num!=-1); system("clear"); return 0; }
|
|
Probabilmente e' a causa della lettura bufferizzata di scanf. Infatti prima del getchar tu prendi in input il numero da convertire e di conseguenza premendo invio rimane nel buffer il carattere newline(\n).
Prova utilizzando la fflush sull'stdin che dovrebbe forzare l'azzeramento del buffer.
Codice sorgente - presumibilmente Plain Text |
...
fflush(stdin);
getchar();
...
|
Oppure scrivi una cosa di questo tipo:
Codice sorgente - presumibilmente C/C++ |
...
while (getchar() != '\n');
|
Ciao GuglielmoS. Ultima modifica effettuata da GuglielmoS il 12/11/2010 alle 16:25 |
|
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
No, non va neanche così u.u
|
|
Alex (Ex-Member)
Expert
Messaggi: 441
Iscritto: 15/08/2005
|
getchar non viene ignorato, solo che nel buffer era presente l'invio di prima (quello che hai premuto dopo aver inserito il numero)
inserisci due getchar(); e risolvi il problema=)
|
|
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
Così funziona GRAZIE
|
|
Alex (Ex-Member)
Expert
Messaggi: 441
Iscritto: 15/08/2005
|
di niente
|
|
Giarados (Ex-Member)
Pro
Messaggi: 69
Iscritto: 25/07/2010
|
A me hanno insegnato ad usare
Codice sorgente - presumibilmente Plain Text |
Ma è migliore la soluzione di Alex!
|
|
Numa Pompilio (Ex-Member)
Pro
Messaggi: 66
Iscritto: 03/05/2010
|
Postato originariamente da Alex:
getchar non viene ignorato, solo che nel buffer era presente l'invio di prima (quello che hai premuto dopo aver inserito il numero)
inserisci due getchar(); e risolvi il problema=) |
per una soluzione "generale", cioè riutilizzabile in ogni circostanza, ti conviene usare un ciclo |
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
Due chiamate a funzione sono molto brutte. Usa questo ciclo while prima di ogni chiamata a getchar
Codice sorgente - presumibilmente C/C++ |
while (getchar() != '\n');
|
Questo ciclo svuota tutto il buffer fino al carattere new-line
|
|