|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2007
Messaggi: 30
|
[C] fgets "fantasma" come si svuota lo stdin
Salve ragazzi,
ho un problema stranissimo (almeno x me che maneggio da poco il C). Ho usato una fgets x prendere stringhe da tastiera. Solo che accade una cosa strana, è come se qualcuno riempisse il buffer dello stdin al posto mio... allora cercando su internet ho visto che in effetti bisogna svuotarlo usando la fflush(stdin) prima della fgets ma niente da fare! E poi succede un altra cosa: prima della fgets il mio programma si blocca in una msgrcv aspettendo un messaggio come è giusto che sia.. ma se scrivo da tastiera mentre sta aspettando, quello che ho scritto andrà a riempire la fgets successiva.. come è possibile? che posso fare?? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6401
|
|
|
|
|
|
|
#3 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
per quanto riguarda il tuo problema, cosa contengono queste "stringhe fantasma"? Quote:
forse potresti regolare qualche parametro di bufferizzazione giustappunto, ma non conviene darti pena per un problema talmente banale che non è neanche un problema. |
||
|
|
|
|
|
#4 | ||
|
Member
Iscritto dal: Aug 2007
Messaggi: 30
|
Quote:
Quote:
|
||
|
|
|
|
|
#5 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
Codice:
setvbuf(stdin, (char*)NULL, _IONBF, 0); Ultima modifica di 71104 : 09-07-2008 alle 10:44. |
||
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Aug 2007
Messaggi: 30
|
Ho provato con la setvbuf(stdin, (char*)NULL, _IONBF, 0) ma non ha funzionato..
poi continuando a provarle tutte ho trovato la tcflush(stdin, TCIFLUSH) e con questa le cose sembrano funzionare. Solo che non la conosco e non so cosa fa e quali sono le differenze con la fflush o con la setvbuff. Non so se potrebbe fare casini o non funzionare su alcune distribuzioni. Qualcuno sa qualcosa? |
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ah, ma lavori su Linux... boh, a me su Windows funzionava e sono dell'opinione che dovrebbe funzionare anche sotto Linux...
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:54.




















