Работа функции std::basic_istream::get

266
13 февраля 2017, 15:27

У меня есть файл с последовательностью int чисел. Необходимо в цикле считывать по одному числу, чтобы проводить с ним манипуляции. В документации сказано, что метод in.get() возвращает int_type. Что этот тип означает?

std::ifstream in("in.txt");
std::cout << in.get(); // печатает код первого символа файла, а надо первое число
Answer 1

Похоже, что числа в Вашем файле хранятся в текстовом представлении и Вы неправильно их считываете. Фактически, Вы читаете текстовый файл посимвольно, получая числовой код прочитанных символов. Вместо этого нужно читать до первого пробельного символа и преобразовывать полученную строку в целое число. Для этого можно воспользоваться оператором чтения из потока.

#include <iostream>
#include <fstream>
int main(int argc, char *argv[])
{
    std::ifstream in("in.txt");
    if (in.is_open()) {
        int i;
        while (in >> i) {
            std::cout << i;
        }
    }
}
Answer 2

in.get() это аналог getchar() -- читает отдельные символы (char) из потока. Метод возвращает int_type вместо char_type, чтобы была также возможность вернуть индикатор конца файла (eof).

Чтобы числа в вектор скопировать из текстового файла, можно istream_iterator использовать:

#include <algorithm> // copy
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
  std::istream_iterator<int> numbers(std::cin), eof;
  // копируем по одному числу из ввода в вывод
  // std::copy(numbers, eof, std::ostream_iterator<int>(std::cout, "\n")); 
  // или в вектор можно сохранить для дальнейшей обработки
  std::vector<int> a(numbers, eof);
  std::copy(a.begin(), a.end(), std::ostream_iterator<int>(std::cout, "\n"));
}

istream_iterator<int>(in) использует аналог in >> i внутри. Подробнее: Как найти слово?

READ ALSO
Русский язык в консоли

Русский язык в консоли

Учу C++ по книжке Страуструпа, не выводятся русские символыВот код:

549
Что нового в c++17 [требует правки]

Что нового в c++17 [требует правки]

Какие полезные и не очень фичи появятся в 17 стандарте?

293
Поменять вывод в консоль на вывод в файл

Поменять вывод в консоль на вывод в файл

Есть функция вывода поддерживаемых процессором инструкций в консольПомогите переделать чтобы сохранялось в файлик

299