В чем подвох(ifstream)?

210
19 февраля 2019, 05:50

Почему-то поток ввода не дает знаки пробелов/перехода на новую строку. Фрагмент кода:

in_f.seekg (0, in_f.end);
    int end_f = in_f.tellg();
    in_f.seekg (0, in_f.beg);
    int current = 0;
    while (!in_f.eof() && ((end_f - current) >= SIZE_OF_BLOCK * SIZE_OF_BLOCK)){
      for (int i = 0; i < SIZE_OF_BLOCK; i++){
           for (int j = 0; j < SIZE_OF_BLOCK; j++){
               in_f >> arr_blocks[i][j];
           }
           current = in_f.tellg();
      }

В массиве оказываются только буквы. Как мне добавить пробелы и переход на новую строку? З.Ы. Такой маленький подвопрос: Можно ли как нибудь проверять, сколько символов осталось непрочитанными, другим спосбом, т.е. не таким как у меня, т.к. мне эта конструкция кажется монструозной.

Answer 1

Кроме указания std::noskipws можно прочитать весь файл в std::string так (а после уже обрабатывать строку вместе с вайтспейсом):

std::string read(std::ifstream& in) {
    std::stringstream sin;
    sin << in.rdbuf();
    return sin.str();
}
Answer 2

Нужно просто включить бинарный режим для чтения. Вы не показываете полный код, так-что пока такой намёк:

open ("filename",ios_base::openmode mode = ios_base::in | ios_base::binary);
READ ALSO
std::map, std:unordered_map и ключ-структура

std::map, std:unordered_map и ключ-структура

Есть вот такая простенькая структура:

207
С++ std::map заполнение из файла

С++ std::map заполнение из файла

Есть вот такой вот map

179
Найти повторяющиеся символы в строке

Найти повторяющиеся символы в строке

Само задание звучит так:

152
Что изменить в программе? Не могу додумать

Что изменить в программе? Не могу додумать

Есть класс часы и статический атрибут часовой поясНеобходимо перевести все часы

218