[C] fgets "fantasma" come si svuota lo stdin

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
pcalessio
Prode Principiante
Messaggi: 103
Iscrizione: venerdì 18 agosto 2006, 20:25

[C] fgets "fantasma" come si svuota lo stdin

Messaggio da pcalessio »

Salve ragazzi,  :D
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??  >:(
Avatar utente
moretto11
Prode Principiante
Messaggi: 217
Iscrizione: venerdì 20 aprile 2007, 16:33
Contatti:

Re: [C] fgets "fantasma" come si svuota lo stdin

Messaggio da moretto11 »

allora, per quanto riguarda lo svuotamento del buffer fflush è sconsigliabile per flussi in entrata in quanto il suo comportamento in questi casi è indefinito...potresti provare con un ciclo del tipo

Codice: Seleziona tutto

while(getchar()!=\n){
}
fgets(...);
prova a vedere se così funziona, dovrebbe sistemare anche il secondo problema.
pcalessio
Prode Principiante
Messaggi: 103
Iscrizione: venerdì 18 agosto 2006, 20:25

Re: [C] fgets "fantasma" come si svuota lo stdin

Messaggio da pcalessio »

forse funziona xo il problema è che cosi mi chide 2 volte di inserire da tastiera e non va bene...
pcalessio
Prode Principiante
Messaggi: 103
Iscrizione: venerdì 18 agosto 2006, 20:25

Re: [C] fgets "fantasma" come si svuota lo stdin

Messaggio da pcalessio »

come non detto... non funziona!!!
pcalessio
Prode Principiante
Messaggi: 103
Iscrizione: venerdì 18 agosto 2006, 20:25

Re: [C] fgets "fantasma" come si svuota lo stdin

Messaggio da pcalessio »

forse ho risolto! sembra funzionare con la    tcflush(stdin, TCIFLUSH);
xo non so se è una cosa giusta usare questa  e sopratutto se funziona in ogni distribuzione.. .sapete qualcosa al riguardo??
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti