C++. Ввод из файла, используя >> и getline()

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

Main.cpp

int main() {
    setlocale(LC_ALL, "ru");
    
    int sizeofStr = 0;
    std::ifstream fin("fileIn.txt");
    
    while (!fin.eof()) {
        fin >> sizeofStr;
        fin.ignore();
        char* str = new char[sizeofStr];
        fin.getline(str, sizeofStr);
        std::cout << str << std::endl;

        delete[] str;
    }

    return 0;

fileIn.txt

62
железо курит нервно в сторонке, когда этот huy думает обо мне
13
eweeweжелезо курит нервно в сторонке, когда этот huy думает обо мне
3
жцуйrtfvфывелезо курит нервно в сторонке, узщцйшзйцзшущзцушз

И проблема именно начиная со строки, 13 в файле. sizeofStr заполняется числом 13, всё как надо,

в переменную str загружаются первые 13 символов строки, как и надо,

однако, в следующей итерации, из-за того, что там дальше остаются символы, sizeofStr не получает значение 3. Можно поставить в цикле после каждого getline() fin.ignore(), но тогда не будет работать итерация на первой строке, так как в ней ровно 62 символа и fin.ignore() проигнорирует строку со значением 13, что нам не нужно.

Можете посоветовать, что сделать?


Ред. 1

К сожалению, по условию можно только так задавать строку. Модули по типу <cstring> использовать нельзя


Заранее благодарю!


Ответы (1 шт):

Автор решения: Zhihar

я бы решал в лоб

  1. считывал бы только с помощью getline в строкой буфер

  2. каждую нечётную строку переводил бы в число с помощью функции atoi

     const int value = atoi(buffer);
    
  3. если есть возможность того, что будут пустые строки, то можно код усложнить и пытаться получить число до тех пор пока оно получено не будет, следующая выборка строки - строка, дальше опять считываем строки пока не получится число (проверяется errno)

  4. если считывается не char*, а wchar_t*, то использовать надо функцию _wtoi

→ Ссылка