Gica78R
01-04-2005, 18:24
Ciao, spero di non sbagliare sezione del forum...
Sto realizzando (per l'esame di Sistemi Operativi) un server proxy http. Niente di eccezionale, comunque il problema non e' strettamente legato a questo.
Il problema e': come faccio a ripulire il buffer dello standard input dopo una lettura da tastiera?
Vi riporto la sezione di codice che mi da il problema:
do
{
printf("\nPROSEGUIRE UGUALMENTE (s/n)? ");
scanf("%c",&scelta);
}
while ((scelta!='s')&&(scelta!='n')&&(scelta!='S')&&(scelta!='N'));
In pratica, se inserisco un carattere diverso da 'n','N','s' o 'S', il ciclo viene ripetuto, ma poiche' nel buffer di input oltre al carattere letto rimane anche il CR/LF, il ciclo viene ripetuto due volte (e quindi la richiesta "PROSEGUIRE..." viene stampata due volte). La cosa non e' fondamentale, ma e' sicuramente antiestetica...
Ho provato con fflush(stdin), ma non cambia nulla. Con __fpurge(stdin) funziona, ma e' una funzione non standard che potrebbe causare problemi di portabilita'. La funzione fpurge(), invece, non e' supportata.
Sapreste aiutarmi?
Grazie,
Gica :cool:
Sto realizzando (per l'esame di Sistemi Operativi) un server proxy http. Niente di eccezionale, comunque il problema non e' strettamente legato a questo.
Il problema e': come faccio a ripulire il buffer dello standard input dopo una lettura da tastiera?
Vi riporto la sezione di codice che mi da il problema:
do
{
printf("\nPROSEGUIRE UGUALMENTE (s/n)? ");
scanf("%c",&scelta);
}
while ((scelta!='s')&&(scelta!='n')&&(scelta!='S')&&(scelta!='N'));
In pratica, se inserisco un carattere diverso da 'n','N','s' o 'S', il ciclo viene ripetuto, ma poiche' nel buffer di input oltre al carattere letto rimane anche il CR/LF, il ciclo viene ripetuto due volte (e quindi la richiesta "PROSEGUIRE..." viene stampata due volte). La cosa non e' fondamentale, ma e' sicuramente antiestetica...
Ho provato con fflush(stdin), ma non cambia nulla. Con __fpurge(stdin) funziona, ma e' una funzione non standard che potrebbe causare problemi di portabilita'. La funzione fpurge(), invece, non e' supportata.
Sapreste aiutarmi?
Grazie,
Gica :cool: