2017-05-27 81 views
-1

所以我一直試圖擺脫從控制檯讀取一些數字時的無限循環。這是讀出部分的代碼:C++從控制檯讀取整數數組

vector<int> all; 
string input; 
while (getline(cin, input)) { 
    int number; 
    stringstream ss(input); 
    while (ss >> number) { 
     all.push_back(number); 
    } 
} 

我嘗試這樣做,以及:

vector<int> all; 
while (cin >> number) { 
    all.push_back(number); 
} 
+0

轉到與第二個例子,進入一個EOF字符到控制檯(EOF常見的字符是按Ctrl-d或Ctrl-Z)。 –

回答

-1

解決這個的一種快速方法是從控制檯中輸入一個空行當打破外環:

while (getline(cin, input)) 
{ 
    if (input == "") 
     break; 
    ... 
} 

注意:一些實現返回一個回車在行的末尾在getline中,它只掃描新行(換行) http://www.cplusplus.com/reference/string/string/getline/

如上所述,從用戶的角度來看,這是一種非常簡單快捷的方式來退出無限循環,他/她可以輸入以空格,製表符,輸入或任意組合分隔的數字,您的矢量將被填充,直到用戶輸入一個空行。

你的代碼看起來就像這樣:

#include <string> 
#include <vector> 
#include <iostream> 
#include <sstream> 

using namespace std; 

int main() 
{ 
    vector<int> all; 
    string input; 
    while (getline(cin, input)) { 
     if (input == "") 
      break; 
     int number; 
     stringstream ss(input); 
     while (ss >> number) { 
      all.push_back(number); 
     } 
    } 
    // Here the vector "all" has any numbers entered by user 
    return 0; 
} 
+0

我很困惑。我的方式適合將所有輸入數字放入我的所有矢量中。 –

+0

「某些實現返回getline中行尾的回車」 - 否,他們不會。 –

+0

「不,他們沒有」,實際上最新的實現沒有,答案的目標是,但一些嵌入式系統_ **(已經發生多次與控制系統)** _與舊的實現和工作在一個環境的終止線是,刪除結尾換行符(ASCII 10或0A十六進制)並留下回車符(ASCII 13或0D十六進制),因此必須進行比較:if(input ==「\ r」 ) 休息; – TrustworthySystems