如何使用cin迴圈接收不確定長度的輸入

2021-09-26 18:15:42 字數 900 閱讀 2360

在看c++ primer 的過程中,書中很多**有類似 while(cin)的**,但在自己練習過程中發現很多問題,例如不知道如何跳出迴圈(ctrl+z)、退出迴圈後丟失字元等等。但後來在不同地方看到的一些例子,找到了幾種控制方法,其中有自己想的比較笨的方法,也有其他人demo中的方法,這次做個小結。

//對單個物件的操作

while(cin >> i)

dosomething;

//對陣列、容器的操作

while(!(cin >> num[i])

dosomething;

while語句中加入對cin內容的判斷

int i;

while( (cin.peek() != 『\n』) && cin>>i)

do something;

起初想到用cin.get();\cin.getchar(); 來判斷,發現輸入內容與輸出內容不符,學習之後發現cin.get() 會將輸入流中的內容「取走」,

例如while((cin.get() != 『\n』 )&& cin>>i);

此時輸入的第乙個字元不會傳給i,而是傳到cin.get()中,導致程式不正確。

而cin.peek()則從輸入流中取出內容進行對比後,將取出內容退回到輸入流中,此時cin>> i可以獲得輸入的第乙個字元。

預設情況下空格和回車會被忽視,而加入這個判斷可以當輸入回車時結束輸入迴圈。

利用cin.clear()保證迴圈輸入內容的正確性

int i;

while(  cin>>i)

do something;

例子中的**中 i 為 int 型別,如果輸入任意一字元變數,則會跳出迴圈,如圖:

如果加上cin.clear(); 和cin.ignore(); 語句,則能夠實現對輸入型別的判斷,從而使得程式更加強大。

如何應對不確定

翻 譯 paula 審 校 ellesse chow 如果你下週開始新工作,要結婚,或者移居異國,你是不是感到心慌意亂?兩個月前,我的一位好朋友就經歷了這樣的恐慌。她接受了公司的安排到乙個遙遠的國家任職,但又無法對自己的決定安心。她不停地擔心會遠離家人朋友,也不知道能否適應當地的天氣,文化和食物等等...

迴圈遍歷不確定長度陣列

在做專案的時候,更新介面,我們可以在請求成功的時候把選中的實體移除,如果父類就有乙個子類,選中子類的時候,我們移除父類,在父類沒有被選中子類數量多於1的時候,我們移除選中的子類。在遍歷不確定的長度的陣列時,我們選中用迭代器 iteratorit acceptnumberdata.iterator w...

JDBC如何拼接不確定數量的引數

雖然變化的引數可以用佔位符 來代替,然而遺憾的是jdbc只提供了單一佔位符功能即佔位符不能是乙個可迭代的集合。因此,對於我們傳過來的集合引數,我們可以動態地建立乙個preparestatement 拼乙個和集合大小相等數量佔位符的sql,再寫乙個迴圈來賦值每乙個佔位符,這樣就可以解決taskid的值...