Newsgroup: it.comp.programmare.win32
Titolo: inespert - C++ e fflush

Salve, sono nuovo della programmazione in C/C++ e a volte mi si presentano
dei problemi di difficile comprensione: sintassi corretta, algoritmo
corretto=> programma che salta. Il problema stavolta è sostanzialmente che
fflush(stdin) non mi riesce a pulire l'input. Quali sono i casi in cui
l'fflush fa cilecca anche se dal Debug dice che funge(return 0)? A  me in
particolari input fatti sia con scanf sia con getch( ) mi rimane l'Enter
(\n) che viene assegnato alla variabile successiva (se è char) o mi va
accapo!!!
Grazie a chiunque mi voglia aiutare.
Ciao, Andrea K.

riesce a pulire l'input.
fflush() non ha un comportamento definito per gli stream di input.

 >Il problema stavolta è sostanzialmente che fflush(stdin) non mi


al primo input. Come risolvo?
Un metodo semplice e' quello di usare :
while ( getchar() != '\n' ) ;
Questo metodo potrebbe non funzionare se l'input e' bufferizzato a
piu' livelli, ma in generale (il 90% delle volte) funziona.
--
Andrea Laforgia - walkietalkie(at)
libero.it
#exclude <windows.h>


Scusa ma non capisco il senso dell'istruzione, è la condizione di un
do-while per l'immissione di una stringa? A parte che, anche andando a
vedere sul manuale del Visual C++,  non ho molto chiara la differenza tra
getch e getchar (sullo stesso manuale c'è anche scritto che è buona norma
non mescolare funzioni di input diverse). Cmq come la devo utilizzare
l'istruzione che mi hai dato?
Ciao, Andrea K.
p.s.:ora provo ad eleminare i getch();


l'istruzione che mi hai dato?
La puoi racchiudere in una funzione (es.: clearkbdbuff()) ed
utilizzarla dopo ogni scanf().
void clearkbdbuff()
{
     while ( getchar() != '\n' ) ;
}
Il manuale ha ragione ed e' un concetto noto da tempo a tutti coloro
che programmano in C.
E' sconsigliato utilizzare funzioni di input diverse nello stesso
contesto, perche' ogni funzione di input, in C, ha una logica di
funzionamento diversa.
Personalmente, evito sempre di usare scanf() e, quando e' importante
avere un input cosi' semplice (di tipo console, o di lettura da file),
mi rivolgo a fgets() (anche perche' scanf() non ha il controllo su
quanti caratteri debbano essere immessi).
La differenza tra getch() e getchar() e' che la prima e' non-standard,
la seconda e' standard.  La prima si basa su funzioni di basso livello
per l'accesso diretto al buffer di tastiera, la seconda sfrutta la il
"line-buffering" della libreria standard del C.
Per "line-buffering" si intende la tecnica di memorizzazione in un
buffer dei caratteri immessi da tastiera, sino a che non viene premuto
invio (la cui sequenza viene comunque memorizzata).
getch() riesce a controllare singoli caratteri, proprio perche' non e'
soggetta ad alcuna tecnica di "buffering".
Quando, invece, digiti qualcosa con scanf() puoi scrivere anche +
caratteri di quelli richiesti in lettura.  
Tutto cio' che sara' al di la' del primo spazio verra' lasciato nel
buffer e fornito ai prossimi input.
E' per questo che si usa la mia funzione dopo ogni lettura che
potrebbe aver lasciato caratteri nel buffer.
Essa provvedera' a leggere tutto cio' che c'e' ancora nel buffer sino
a che non incontra la sequenza di invio.
Non so se sono stato chiaro... :)


 ha scritto nel messaggio
news:3b295394...@news.libero.it...
