PDA

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éééééé!!!!!!!!

fpucci
25-03-2004, 13:02
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

Molz
29-03-2004, 10:38
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:(