Figuring out cin

[Recommended Reading]

Let's Rock!

cin

1.cin是類istream的對象,其中包含cin>>,cin.get,cin.getline等方法。
2.我們在鍵盤上敲打出字符串,通過按下回車鍵將字符串送入標準輸入緩沖區。cin的緩沖區在存儲字符串時將回車鍵(/r)轉化為 ' /n ' 存儲,若輸入"123"并按下回車,cin的緩沖區內將為"123/n"四個字符。
3.cin的成員函數從緩沖區中讀取字符,并在緩沖區為空時阻塞,等到緩沖區中出現字符時讀取。

cin>>

1.cin>>等價于cin.operator>>(),他對于緩沖區內空格,換行符,回車的處理采取以下規則:
(1)若cin>>在緩沖區中首先讀取到的是空格,換行符,回車等分隔符時,它將清除這些分隔符并讀取后面的非分隔符字符。
(2)cin>>可以同時讀取多個字符,這些字符之間用分隔符分開,被讀取的字符與它們之間的分隔符不再存在于緩沖區中。
(3)若cin>>已經完成了讀取,將對緩沖區仍然存在的分隔符,字符不作處理。
2.若希望cin>>同樣讀取換行符,可提前使用語句:cin>>noskipws;,使用語句:cin>>skipwa;恢復。

cin.get

1.使用char c=cin.get()或cin.get(char c)獲取一個字符,無論該字符是否為分隔符都將被cin從緩沖區中讀取,我們可以使用cin.get()來吸收之前輸入字符剩下的回車符號,也可以在程序最后使用cin.get()讓它在運行完成后不會自動關閉。
2.使用cin.get(str,size)讀取字符串,在遇到換行符/n時停止讀取,并仍然保留換行符/n在緩沖區中。使用函數getline(str,size)同樣可以讀取字符串,在遇到/n時停止讀取,但getline將在讀取后清除該換行符。
3.cin.get()僅可以用于讀取char*(數組)類型的字符串,getline則還可以讀取string類型的字符串。

cin.getline

1.cin.getline(char* s,size,char delim)同樣用于讀取字符串,在字符串中出現delim時停止讀取。若只使用cin.getline(char* s,size)則默認為遇到換行符結束。
2.cin.getline將在讀取后清除緩沖區內的結束符。

cin condition state

To be completed

getline,gets,fgets

1.getline是定義在命名空間std中的全局函數,在頭文件<string>中被定義,使用方式為getline(cin,str,delim),使用方式與cin.getline相似。
2.getline與cin.getline的不同在于:
1.cin.getline屬于istream流,getline屬于string流。
2.cin.getline讀取后將結束符清除,getline讀取結束符并將結束符轉化為'/0'儲存。
3.gets與fgets是c語言的庫函數,使用方式為gets(char* s),fgets(char* s,sizeof(s),stdin)。gets在遇到換行符前一直讀取字符并存儲在s中,并在s的結尾儲存NULL作為結束,若s儲存空間不夠將發生溢出的情況;fgets在遇到換行符或者讀取字符長度到達sizeof(s)-1時結束,并在s的結尾存儲'/o'作為結束。

summary

1.在存儲string類型變量時使用getline函數,cin的成員變量、gets、fgets只能用于存儲數組類型變量。
2.cin.get、cin.getline不處理結束符,使用它們存儲字符串時要注意緩沖區中仍然存在的結束符。
3.cin的成員變量在頭文件istream中定義,getline在string中定義,gets,fgets在cstdio中定義。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • 淺談C++常用輸入輸出 在編寫C++程序的時候,經常因為輸入輸出頭疼,所以在這里做一個小結,記錄一下常用的輸入輸出...
    MinoyJet閱讀 3,763評論 0 6
  • C/C++輸入輸出流總結 前兩天寫C++實習作業,突然發現I/O是那么的陌生,打了好長時間的文件都沒有打開,今天終...
    LuckTime閱讀 1,748評論 0 6
  • 2018年8月17日 22:14:16 title: C++PrimerPlus讀書筆記typora-root-u...
    _layty閱讀 226評論 0 0
  • 第一章 計算機與C++編程簡介 C++程序6個階段編程 ->預處理->編譯->連接->裝入->執行1.程序在編譯器...
    rogertan30閱讀 3,948評論 0 1
  • 1、scanf 讀取時遇到空格就停止讀取 2、cin cin空字符(包括回車符,制表符,空格,換行符)都會當成一個...
    星空_ad64閱讀 6,995評論 0 1