getline 會讀取快取區的換行符

2021-10-05 06:41:16 字數 1059 閱讀 7524

getline(cin,str)函式是處理string類的函式。第二個引數為string型別的變數。 此函式可讀取整行,包括前導和嵌入的空格,並將其儲存在字串物件中。

但是在cin和getline使用過程中,會發現getline讀取快取區的換行符導致直接換行的問題,比如下面這個例子。

#include

#include

using

namespace std;

intmain()

輸出:

可以看出,輸出僅僅是5,然後並沒有新的輸入了,那是為什麼呢?

因為你輸入cin之後,你輸入了換行,所以getline直接把換行符作為輸入了,所以沒有繼續輸入,所以這時候,我們需要注意,專門處理一下cin和getline之間的換行符,可以採用 cin.get、cin.ignore、getchar等方法。

就是乙個c++輸入流的方法,讀取乙個字元。裡面有引數的一般就讀取乙個 char字元,或者就是讀乙個操作符比如空格。

函式是c++標準輸入流(cin)中的乙個方法。cin.ignore()函式中有兩個引數,分別為數值型的a 和 字元型的 ch ,即cin.ignore( a, ch )。它表示從輸入流 cin 中提取字元,提取的字元被忽略,不被使用。而每拋棄乙個字元,它都要進行計數和比較字元:如果計數值達到 a 或者被拋棄的字元是 ch ,則cin.ignore() 函式執行終止;否則,它繼續等待。

它的乙個常用功能就是用來清除以回車結束的輸入緩衝區的內容,消除上一次輸入對下一次輸入的影響。

如果預設不給引數的話,預設引數為cin.ignore(1, eof),即把eof前的1個字元清掉,沒有遇到eof就清掉乙個字元然後結束。

getchar也就是讀乙個字元,一般就是用來讀字元

#include

#include

using

namespace std;

intmain()

資料讀取 寫入 環型快取區

資料的讀取和寫入管理,可以通過列表和環型列表來實現,文字使用環型列表來實現資料的讀取和寫入操作,當寫資料超過緩衝區大小時,通過讀寫位置重複利用已讀取的區域寫入資料值。描述 環型快取區操作類 說明 本類對記憶體做環型快取區管理 ifndef circlebuffer h define circlebu...

getline讀取不等待輸入的問題

先cin 然後getline讀取時會發生一閃而過不等待輸入的情況,用fflush stdin 清除輸入緩衝區也是如此,糾結半天終於在妹神指導下搞清楚 由於輸入乙個資料後按了回車鍵,而getline沒有忽略換行符,直接將前面輸入的數字後面的換行符當作了輸入,導致沒有等待輸入的情況。此時,需要在getl...

無縫的快取讀取 雙儲存快取策略

最近在做乙個web的資料統計的優化,但是由於資料量大,執行一次sql統計要比較長的時間 一般700ms算是正常 正常的做法只要加個快取就好了。但是同時業務要求此資料最多1分鐘就要更新,而且這一分種內資料可能會有較多變化 而且原系統不太易擴充套件 也就是說快取1分鐘就要失效重新統計,而且使用者訪問這頁...