View Full Version : [c]scanf e fflush
Fosfolipide
24-03-2004, 22:17
ciao
vi ringrazio in anticipo per gli aiuti
quando utilizzo + scanf mi riconosce solo il primo e salta le altre se non uso "fflush(stdin);".
Ho avuto questo problema con dev-c++ e visual studio.
C'è un modo per evitare di inserire ogni volta il comando fflush dopo ogni scanf?
Fosfolipide
24-03-2004, 22:21
il problema rimane anche se uso getchar()
Argosoft
25-03-2004, 12:55
è vero! c'è di più, se si vuole acquisire una stringa, mica si può fare
scanf("%s",str)
se la stringa è composta da una parola sola è OK; ma se per esempio scrivi "ciao peppe" la lettura si ferma al primo spazio e i resto della stringa rimane "incastrato"...
cioè
scanf("%s",str)
scanf("%i",&num)
se faccio così e la stringa contiene uno spazio, la prima parola viene acquisita, e la seconda va a finire sul secondo scanf con i risultati che puoi immaginare!!
devo usare per forza la gets, ma perchéééééé!!!!!!!!
devo usare per forza la gets, ma perchéééééé!!!!!!!!
Scusa: ma qual'è il problema? C'è proprio per questo!!!!!
:)
Il C, nel caso della scanf, considera lo spazio come un separatore di tokens. Astuto, direi!
Ziosilvio
25-03-2004, 17:49
Originariamente inviato da Fosfolipide
quando utilizzo + scanf mi riconosce solo il primo e salta le altre se non uso "fflush(stdin);".
fflush() non ha un comportamento predefinito quando viene chiamata su un file di input.
E' una brutta abitudine da non prendere.
E poi, per leggere una stringa, è più sicura fgets() .
C'è un modo per evitare di inserire ogni volta il comando fflush dopo ogni scanf?
Io di solito faccio questo:
while (getchar() != '\n')
;
Dovrebbe funzionare nel tuo caso, perché scanf() "rimette a posto" il primo carattere che non le serve.
Ah: puoi trovare utile questa FAQ (http://www.eskimo.com/~scs/C-faq/top.html).
Fenomeno85
25-03-2004, 18:08
ma fflush non serviva a pulire il buffer??
~§~ Sempre E Solo Lei ~§~
h1jack3r
29-03-2004, 08:44
non capisc perchè non vuoi usare gets
Nn vorrei dire 1 cavolata, ma almeno sotto Linux dovrebbe esserci 1 kiamata a sistema nella qale specifiki qando viene svuotato il buffer d lettura (ke d default è svuotato ogni \n) in modo da poterlo svuotare a ogni carattere ke si legge senza usare la fflush, ma purtroppo nn ricordo il nome d qesta funzione:(
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.