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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)樹之后序遍歷的實現(xiàn)
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之后序遍歷的實現(xiàn)的相關(guān)資料,這里提供一個簡單實例來實現(xiàn)后續(xù)遍歷,對于數(shù)據(jù)結(jié)構(gòu)樹的學(xué)習(xí)很有幫助,需要的朋友可以參考下2017-07-07
VSCODE調(diào)試RDKit內(nèi)核的方法步驟(C++)
本文主要介紹了VSCODE調(diào)試RDKit內(nèi)核的方法步驟,這個過程可以分為三個部分:安裝 RDKit 所需環(huán)境,安裝 VSCode 相應(yīng)插件, 寫調(diào)試代碼編譯,感興趣的可以了解一下2021-08-08
詳談全排列next_permutation() 函數(shù)的用法(推薦)
下面小編就為大家?guī)硪黄斦勅帕衝ext_permutation() 函數(shù)的用法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
C標(biāo)準(zhǔn)庫<assert.h>的實現(xiàn)詳解
這篇文章主要介紹了C標(biāo)準(zhǔn)庫<assert.h>的實現(xiàn),主要包括了<assert.h>的基本概念、實現(xiàn)及用法等,需要的朋友可以參考下2014-09-09

