C++技巧:輸入緩沖區(qū)清除方法

字號:

通常大家會用sync()函數(shù)來清除輸入緩沖區(qū)的內(nèi)容。個人感覺還是用ignore更好。
    先簡單說下sync(),sync()的作用就是清除輸入緩沖區(qū)。成功時返回0,失敗時badbit會置位,函數(shù)返回-1.
    另外,對于綁定了輸出的輸入流,調(diào)用sync(),還會刷新輸出緩沖區(qū)。
    但由于程序運行時并不總是知道外部輸入的進度,很難控制是不是全部清除輸入緩沖區(qū)的內(nèi)容。通常我們有可能只是希望放棄輸入緩沖區(qū)中的一部分,而不是全部。比如清除掉當前行、或者清除掉行尾的換行符等等。但要是緩沖區(qū)中已經(jīng)有了下一行的內(nèi)容,這部分可能是我們想保留的。這個時候不要用sync()??梢钥紤]用ignore函數(shù)代替。
    cin.ignore(numeric_limits::max(),’\n’);//清除當前行
    cin.ignore(numeric_limits::max()); //清除cin里所有內(nèi)容
    不要被長長的名字嚇倒,numeric_limits::max()不過是climits頭文件定義的流使用的值,你也可以用一個足夠大的整數(shù)代替它。
    使用ignore顯然能比sync()更精確控制緩沖區(qū)。
    還有ignore()這樣用,可以清除一個字符。不過這個用的不多,對于清楚知道要棄置一個字符的情況,完全可以由程序做一次讀操作,然后放棄讀入內(nèi)容來實現(xiàn)