【c語言】清空緩存 的問題


清空stdin中的緩存

int c;

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

會把緩存清空,但是會遺留下'\n'  (10)

讀取時,可以使用 scanf("%[^\n]",c);來空過\n。

或 scanf("\n%d",c);

 

 

失敗的解決方案:

1,

while(!feof(stdin)){

  getchar();

}

結果:程序會卡在這段,永遠出不了while循環。

因為feof(FILE* file )函數必須等下一次讀取不到數據使,才會返回非0;如讀取空文件時,直接用feof(file)返回的是0,而用一下

fread()函數后,雖然什么都沒有讀到,但是feof(file)就返回非0了;

所以就會造成雖然到了結尾了,但是feof(stdin)返回的還是0,然后程序就會卡在getchar(),等待輸入。

 

2,

fflush(stdin);

使用后無效,查了一下,此函數不是標准函數,VC編譯器可以使用,但是其他的編譯器如gcc是不支持的(注:fflush(stdout)是標准函數)

 

3,

while((c = getchar()) != EOF && c != '\n');此時緩沖區第一個字符是'\n'。

scanf("%*[\n]%d",c);  此時c讀取的是\n,沒有讀到后面的輸入,導致程序錯誤。

 

沒想明白為什么,%【\n】不是讀到第一個非\n時停止嗎,加上星號忽略這個,然后%d就可以讀到輸入。但是結果不對,請大俠解答謝謝!

 

4,

用setbuf(stdin, NULL);清空緩存

setbuf的函數原型是

void setbuf (FILE *stream ,char *buf ) ;

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM