Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Svuotare buffer stdin
Forum - C/C++ - Svuotare buffer stdin

Avatar
Dante.cpp (Normal User)
Pro


Messaggi: 65
Iscritto: 23/11/2011

Segnala al moderatore
Postato alle 17:58
Martedì, 21/02/2012

questo frammento, compilato con cc sotto linux:
Codice sorgente - presumibilmente C++

  1. int main(void){
  2.        
  3.         char c;
  4.         char n;
  5.  
  6.  
  7.         int i;
  8.         for(i=0;i<8;i++){
  9.                 printf("scrivi coordinata alfanumerica: ");
  10.                 scanf("%c%c", &c, &n);
  11.                 printf("%c%c \n", c, n);
  12.         }
  13. }



produce un out, del tipo:
Testo quotato

scrivi coordinata alfanumerica: d2
d2
scrivi coordinata alfanumerica: a7


a
scrivi coordinata alfanumerica: 7

scrivi coordinata alfanumerica: c5
c5
scrivi coordinata alfanumerica: f4


f
scrivi coordinata alfanumerica: 4

scrivi coordinata alfanumerica: b7
b7
scrivi coordinata alfanumerica: g4


g



google mi ha consigliato di usare la funzione fflush(stdin) per svuotare il buffer della tastiera, ma non ho ottenuto risultati, qualche consiglio???

PM
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 18:14
Martedì, 21/02/2012
Ciao!

La scanf, non toglie dal buffer il carattere invio.
Per rimediare, il comando fflush(stdin) non è sempre attendibile. Meglio utilizzare il getchar() a tale scopo, in questo modo:
Codice sorgente - presumibilmente C/C++

  1. for(i=0;i<5;i++)
  2.         {
  3.                 printf("scrivi coordinata alfanumerica: ");
  4.                 scanf("%c%c", &c, &n);
  5.                 while (getchar()!='\n') ;  // svuoto il buffer da tastiera
  6.                 printf("%c%c \n", c, n);
  7.         }


Per quale motivo fflush(stdin) non è sempre attendibile? Grazie - torre92 - 27/02/12 18:42
PM
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 20:52
Martedì, 21/02/2012
Molto importante è sottolineare che il seguente codice:
Codice sorgente - presumibilmente Plain Text

  1. while( getchar() != '\n' );


Svuota tutto il buffer fino al carattere invio (\n) Dal momento che, in C, molte sono le operazioni di input in cui lasciano il carattere NEW LINE a passeggio
quello è esattamente quello che cerchi xD

PM
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Up
0
Down
V
Segnala al moderatore
Postato alle 18:13
Martedì, 21/02/2012
Ciao , anche io l'ho provato con linux, prova a mettere getchar dopo scanf.

Ultima modifica effettuata da dmr il 21/02/2012 alle 18:13
PM