2016-05-25 14 views
-4

ここに質問です。 私はint型のベクトルを持っており、ユーザーは必要な限り要素を入力する必要があります。そして、このベクトルは、何らかの理由でサイズを計算する関数に渡されます。そうする方法はありますか?不明なサイズベクトル入力

std::vector<int> vec; 

std::string buffer = ""; 

std::cout << "Enter numbers. " 
      << "After you finish, enter newline" << std::endl; 

do { 
    std::getline(std::cin, buffer); 
    if (buffer.size() > 0) { 
     vec.push_back(atoi(buffer.c_str())); //stoi was not declared =(
    } 
} while (buffer != ""); 

foo(vec); 
.... 
void foo(std::vector<int> &input) 
{ 
    for (const int &i : input) 
     { 
      std::cout << i << endl; 
     } 
} 

しかし、このコードは正しい方法では機能しません。数字を入力するだけで何もしません。何が間違っているのか分かりません。 あなたがこれ以上入力(またはセンチネル値が入力されるまで)が存在しなくなるまでのベクトルに項目を追加したい場合はstd::istringstreamoperator >>の使用量は使用することができ、

+0

「何もしない」とはどういう意味ですか?あなたは何もベクトルにプッシュバックされていないことを意味しますか?問題の 'std :: vector'変数名' vec'と 'input'の間には矛盾があります。 – ArchbishopOfBanterbury

+0

argh、copypaste中に変わるための勇気; 何かを入力する機会が与えられないだけです – Evgeny

+0

ユーザーが数字の代わりに「カエル」を入力するとどうなりますか? –

答えて

0

を(++、11 Cは有効):

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

int main() 
{ 
    std::vector<int> vec; 
    std::string buffer; 
    int data; 
    std::getline(std::cin, buffer); 
    std::istringstream iss(buffer); 
    while (iss >> data) 
      vec.push_back(data); 
    foo(vec); 
} 

Live Example

+0

これは止まらないしユーザーが空行を入力すると、EOF文字を入力する必要があります。 – Barmar

+0

おっと、私は誤解しました。これにより、元のコードと同じように、1行に1つずつではなく、1行にすべての数字を入力する必要があります。 – Barmar

+0

これは私が検索したものですね、ありがとう! – Evgeny

関連する問題