2017-05-27 25 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 16進数)を取り除き、キャリッジリターン(ASCII 13または0 D 16進数)を残して、比較を行う必要があります。if(input == "\ r" ) 休憩; – TrustworthySystems

関連する問題