Как читать числа, разделенные пробелами, с консоли?

Я пытаюсь выполнить простую задачу чтения чисел, разделенных пробелами, с консоли в вектор , но я не понимаю, как это сделать правильно.

Это то, что я делал до сих пор:

int n = 0;
vector steps;
while(cin>>n)
{
    steps.push_back(n);
}

Однако это требует от пользователя нажатия недопустимого символа (например, a ), чтобы разорвать цикл while . Я этого не хочу.

Как только пользователь вводит числа вроде 0 2 3 4 5 и нажимает Enter , я хочу, чтобы цикл был прерван. Я также пробовал использовать istream_iterator и cin.getline , но не смог заставить его работать.

Я не знаю, сколько элементов введет пользователь, поэтому я использую вектор .

Пожалуйста, предложите правильный способ сделать это. #include #include #include #include ...

Пытаясь найти ответ на этот вопрос , я написал эту маленькую тестовую программу:

#include 
#include 
#include 
#include 
#include 

void writeFile() {
    int data[] = {0,1,2,3,4,5,6,7,8,9,1000};

    std::basic_ofstream file("test.data", std::ios::binary);
    std::copy(data, data+11, std::ostreambuf_iterator(file));
}

void readFile() {
    std::basic_ifstream file("test.data", std::ios::binary);
    std::vector data(std::istreambuf_iterator(file),
        (std::istreambuf_iterator()));

    std::copy(data.begin(), data.end(), 
              std::ostream_iterator(std::cout, " "));
    std::cout << std::endl;
}


int main()
{
    writeFile();
    readFile();

    return 0;
}

Она работает, как ожидалось, записывает данные в файл и после прочтения файла он правильно печатает:

0 1 2 3 4 5 6 7 8 9 1000

Однако я не уверен, есть ли какие-либо подводные камни (не говоря уже о проблемах с порядком байтов, они всегда возникают при работе с двоичными данными)? Это разрешено?

7
задан Community 23 May 2017 в 12:04
поделиться