C++中cin的返回值問題
cin的返回值
今天在用STL時用到while(cin>>s1>>a>>s2>>b)這樣的語句,本來所有的輸入都是“string+int+string+int”格式的,但是結(jié)束標(biāo)志卻是“quit”,于是很好奇cin的輸入到底是返回什么。
首先想到,cin是一個對象,那么到底是返回什么影響了while,查了很多博客才發(fā)現(xiàn)是操作符“>>”在起作用,這個操作符接收一個istream對象作為其做操作數(shù),接收一個對象作為其右操作數(shù)。
”>>”操作符返回其左操作數(shù)作為結(jié)果,這樣也就可以解釋為什么上面可以將個幾輸入操作合并了。
原因在于得到輸入后返回一個cin,接著可以繼續(xù)操作讀取了,而且在輸入不符合類型和EOF時停止。
輸入(cin)緩沖是行緩沖。
當(dāng)從鍵盤上輸入一串字符并按回車后,這些字符會首先被送到輸入緩沖區(qū)中存儲。
每當(dāng)按下回車鍵后,cin 就會檢測輸入緩沖區(qū)中是否有了可讀的數(shù)據(jù)。
cin流輸入的返回值問題
感覺今天發(fā)現(xiàn)一個比較好的問題
while(cin>>n)
這個語句肯定經(jīng)??吹桨?/p>
但是
為什么可以用while來判斷呢
難道cin>>n的返回值是bool 類型?
這時候,看源碼 的 重要性就體現(xiàn)出來了
在ios里面有
operator void *() const {
if(state&(badbit|failbit) )
return 0;
return (void* )this;
}這樣一段代碼
再來看這樣一段文字

所以說 invalid state 時 返回值為0,否則是(void *)首地址
這樣就可以用while來判斷了
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
數(shù)據(jù)結(jié)構(gòu)C語言鏈表的實(shí)現(xiàn)介紹
大家好,本篇文章主要講的是數(shù)據(jù)結(jié)構(gòu)C語言鏈表的實(shí)現(xiàn)介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2021-12-12
C語言SetConsoleCursorPosition函數(shù)使用方法
這篇文章介紹了C語言SetConsoleCursorPosition函數(shù)的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
C語言實(shí)現(xiàn)簡單酒店管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
關(guān)于c++ 智能指針及 循環(huán)引用的問題
下面小編就為大家?guī)硪黄P(guān)于c++ 智能指針及 循環(huán)引用的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01

