Sappiamo che stdin
è, per impostazione predefinita, un input bufferizzato; la prova che è in uso di uno qualsiasi dei meccanismi che "lasciano dati" a stdin
, come scanf()
:C'è comunque da sbirciare al buffer stdin?
int main()
{
char c[10] = {'\0'};
scanf("%9s", c);
printf("%s, and left is: %d\n", c, getchar());
return 0;
}
./a.out
ciao
ciao e sinistra è 10
10
essendo a capo naturalmente ...
sono sempre stato curioso, c'è comunque di "sbirciare" al stdin
buffer senza rimuovere ciò che può risiedere lì?
EDIT
Un esempio migliore potrebbe essere:
scanf("%9[^.]", c);
Con un ingresso di "at.ct", ora mi sono "dati" (ct\n
) a sinistra su stdin
, non solo una nuova riga.
È possibile 'ungetc()' dopo sbirciare. Abbastanza buono? –
@DanielFischer - Immagino che non sia male ... E se fosse rimasto un intero gruppo di personaggi? Posso sapere la lunghezza dei dati rimasti su stdin? o potrei 'ungetc()' più di un carattere? – Mike
"Un carattere di pushback è garantita. Se la funzione' ungetc' è chiamato troppe volte sullo stesso flusso senza un intervento operazione di lettura o il posizionamento di file su quel flusso, l'operazione potrebbe non riuscire." Solitamente puoi 'ungetc' più di uno, ma solo uno è garantito. –