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

字號(hào):

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