如何解決STDIN內暫存的問題(目前會的方法)

如何解決stdin內暫存的問題,目前我有查到並練習使用過的有:
1.fflush(stdin)..........這種方式在網路資源上有人提,雖然有效果,但多數人不建議使用。
2.setbuf(stdin,NULL)....網路上有看到,將預設緩衝區變成無緩衝區,NULL解釋是給stdin一個空值,就像清空,但是如過後面又有要抓stdin內容的字元或數值,在每一次scanf我都會執行一次,有效果且似乎沒有人提到有後遺症,但使用上頗為不便利(每次都要先打再scanf),我是弄成簡易的函式每次要用就呼叫。
3.getchar.....使用getchar不斷獲取緩衝區內的內容,直到緩衝區內空為止,這種方法很有效,建議使用,C primer 上也介紹了這種方法,但是我還沒有融會貫通,只是會使用...有機會要徹底搞懂。
char str[5];
int i,n;
n=sizeof(str);
for(i=0;i<n;++i){
str[i]=getchar(); //網路資源是說會獲取直到緩衝區空的,測試過後似乎是少了什麼東西導致stdin還有字元或數值未消除。
}
 setbuf(stdin,NULL);//為了消除stdin內容暫時用(找尋其他方式中)
上面範例似乎還是有問題,需要找時間徹底解決。

getchar似乎還需要跟EOF配合使用,目前嘗試中。
**EOF在C標準函式庫中表示檔案結束符(end of file)。在while迴圈中以EOF作為檔案結束標誌。

留言