Реализуйте функцию, которая будет считывать последовательность значений из входного потока в качестве аргумента - PullRequest
0 голосов
/ 14 ноября 2011

В задаче, которую мне дали попробовать в книге на C ++, мне сказали создать функцию, которая будет принимать входной поток в качестве аргумента, а значения int хранятся в последовательности в потоке.

Теперь я получу, что объявление будет выглядеть примерно так:

foo(istream &arg);

Но я не могу понять, как получить значения во входном потоке и сохранить их в другой переменной.Может ли кто-нибудь помочь мне и дать простой пример, который я могу понять?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 14 ноября 2011

Непонятно, чего ты не понимаешь. Чтобы прочитать одно значение, вы используйте оператор >> в потоке. Чтобы прочитать более одного значения, вы используйте >> более одного раза; если вы хотите прочитать весь поток, вы цикл пока не произойдет сбой ввода. Для хранения значений вы используете std::vector<int>, используя push_back для вставки каждого значения.

Конечно, опытный программист на C ++ более склонен использовать std::istream_iterator<int> для прямой инициализации вектора:

std::vector<int>
foo( std::istream& inputStream )
{
    return std::vector<int>
        (std::istream_iterator<int>( inputStream )),
        (std::istream_iterator<int>()) );
}

Однако, как представляется, цель проблемы - научиться писать цикл, поэтому в учебных целях вам, вероятно, следует написать собственный цикл.

0 голосов
/ 15 ноября 2011

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

Вы можетеwant std :: getline , который будет читать все до следующего перехода на новую строку и сохранять весь кусок в строку, которую вы можете проанализировать (или удалить).

Как уже упоминалось, >> будет считывать другое значение (обычно через пробел) один за другим, поэтому вы можете сохранить первый вход в переменную x, второй в y, третий в z и т. д. (Если вы хотитечтобы стать по-настоящему модным, вы можете даже вставить их в vector, list, deque или в любой другой контейнер по вашему выбору.)

0 голосов
/ 14 ноября 2011

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

std::cout << "enter an integer number: ";

и

int x;
std::cin >> x;

Так как это выглядит как домашнее задание, я оставлю это при этом подсказке.

Как вы могли догадаться, std::cin является примером istream (входной поток), а std::cout является ostream (выходной поток)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...