2017-08-31 53 views
-1

我不明白爲什麼我必須在while循環中再次使用cin.get()。在while循環之前使用cin.get()做同樣的事情,cin.get()會在while循環中做同樣的事情。它讀取我在輸入空格時輸入的一串文本。但顯然在這個程序中,我試圖將所有的文本轉換爲矢量。如果我要從while循環中排除cin.get(next),並且只有line.push_back(next),那麼程序會收到錯誤並崩潰。在while循環中使用cin.get()的目的是什麼?

請解釋它爲什麼這樣做。謝謝

//Demonstration of the generic find function 
#include <vector> 
#include <algorithm> 
#include <iostream> 

using namespace std; 

int main() 
{ 
vector<char> line; 
cout << "Enter a line of text: \n"; 
char next; 
cin.get(next); 
while(next != '\n') 
{ 
    line.push_back(next); 
    cin.get(next); 
} 
return 0; 
} 
+3

首先閱讀['std :: basic_istream :: get'](http://en.cppreference.com/w/cpp/io/basic_istream/get)。如果你不瞭解它所調用的功能,你就不會明白程序的作用。相關的,你的代碼有一個錯誤。如果偶然發生錯誤狀態,它將循環到無限期尋找一條永不會到來的換行符。 – WhozCraig

+1

它*獲得輸入。不確定混淆來自何處。也許你應該通過調試器運行代碼,以便你可以看到它實際上在做什麼。 – NathanOliver

+0

您可以在循環中使用它以使其運行多次。如果你從循環中刪除了該行,那麼所有循環都會一遍又一遍地將同一個字母推向該向量。注意,while循環的結束條件永遠不會到來,如果輸入的話。 –

回答

0

這裏有一個小指南來幫助你。有時很難在開始時看到樹林。

定義下一個char類型的

char next; 

由於接下來的命名變量沒有任何意義,現在,let's得到一個。我們需要它作爲我們的while語句中的條件。

cin.get(next); 

讓循環,一直到下一次等於「\ n」

while(next != '\n') 
{ 

我們仍然沒有做任何有意義與next我們唯一知道的是,它doesn't等於「\ n」,所以我們真的應該做些什麼。

我們把它在我們的載體中。

line.push_back(next); 

很好。到目前爲止完成。出於多種原因,我們現在需要接下來的新價值。一方面,如果我們不改變接下來,我們將永遠循環(至少太長),因爲循環的條件不會得到新的東西來咀嚼,另一方面,我們想要一個新的值爲我們的向量,不是嗎?

所以,是的,讓我們接下來下一

cin.get(next); 

而且回到我們的循環的開頭測試

} 

that's它。

相關問題