Как заполнить массив-строку одной командой?

Рейтинг: 1Ответов: 4Опубликовано: 21.12.2014

Как заполнить одномерный массив единовременно, то есть не по одному элементу (первое число - Enter - второе число - Enter - ...), а например (1 2 3 4 5 6 7 8 Enter), как обработать подобный ввод?

Ответы

▲ 3Принят

Получил в ходе экспериментов:

int a[5];
for (int i = 0; i < 5; i++)
cin >> a[i];

Спасибо!

▲ 1

Оба случая одинаково

#include <err.h>
#include <sysexits.h>
...
int array[N];
for (int i = 0; i < N; i++)
  if (scanf("%d", array + i) != 1)
    errx(EX_DATAERR, "Bad input");
▲ 1
#include <iostream>

using namespace std;

int main(){
    int arr[3];

    cin >> arr[0] >> arr[1] >> arr[2]; // обеспечивает ввод трех чисел разделенных пробелами и подтверждение клавишей enter

    cout << "a: " << arr[0] << " b: " << arr[1] << " c: " << arr[2] << endl;

    return 0;
}
▲ 1

Чтобы прочитать неизвестное заранее количество разделённых пробелами целых чисел, можно использовать vector и istream_iterator<int>:

std::istream_iterator<int> numbers(std::cin), eof;
std::vector<int> a(numbers, eof);

Полный пример:

#include <algorithm> // copy
#include <iostream>
#include <iterator>
#include <vector>

int main()
{
  std::istream_iterator<int> numbers(std::cin), eof;
  std::vector<int> a(numbers, eof);
  std::copy(a.begin(), a.end(), std::ostream_iterator<int>(std::cout, "\n"));
}

std::copy() используется, чтобы напечатать каждое число из вектора на новой строке.

Пример использования:

$ g++ read-vector.cc -o read-vector && echo 1 2 3 4 5 6 7 8 | ./read-vector

Вывод:

1
2
3
4
5
6
7
8