2016-05-25 5 views
-4

это вопрос. У меня есть вектор ints, и пользователь должен вводить его элементы до тех пор, пока он или она этого захочет. Затем этот вектор передается функции, которая вычисляет ее по какой-либо причине. Есть ли способ сделать это? Я нашел код на берегу Интернет:Неизвестный размер векторный ввод

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; 
     } 
} 

Но этот код не работает в правильном направлении: Я выбираю входящие номера, и он просто ничего не делает. Не знаю, что с этим не так. (C++ 11 включен)

+0

Что вы подразумеваете под "он ничего не делает"? Вы имеете в виду, что ничто не возвращается к вектору? Кстати, между «std :: vector» есть переменные «vec» и «input» в вопросе. – ArchbishopOfBanterbury

+0

argh, подлежит изменению при копировании; Это просто не дает мне даже шанса что-то ввести – Evgeny

+0

Что происходит, когда пользователь вводит «лягушку» вместо числа? –

ответ

0

Если вы хотите добавить элементы вектора, пока не будет больше не вход (или пока значение сторожевого не вводится), может быть использовано использование std::istringstream и operator >>:

#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

К сожалению, я неправильно понял. Это требует, чтобы он набирал все числа в одной строке вместо одной строки, как в своем исходном коде. – Barmar

+0

Ну, похоже, это то, что я искал, спасибо! – Evgeny

Смежные вопросы