10.19.2010

fgetc, fgets, fflush

fgetc 是一次只get 一個字元

當 fgetc(stdin)執行時,

是要等有抓到 "enter" 或是 EOF 才會離開

如果user 打很多字,最後才按"enter"

則fgetc return 的值是第一個字,但後面第二個字到"enter"還在 steam 裡

所以下一次的fgetc(stdin)就會抓到下一個字元

可以用下列方式來清
void flush_input ( FILE *in )
{
int c;

while ( ( c = fgetc ( in ) ) != EOF && c != '\n' );

clearerr ( in );
}

printf 也是, 如果印的內容最後沒有"\n" 或 EOF
則不會印出,資料會被keep 在 stream裡
要在之後下 fflush(stdout);
才會印

1 comment: