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 шт):
я бы решал в лоб
считывал бы только с помощью
getlineв строкой буферкаждую нечётную строку переводил бы в число с помощью функции
atoiconst int value = atoi(buffer);если есть возможность того, что будут пустые строки, то можно код усложнить и пытаться получить число до тех пор пока оно получено не будет, следующая выборка строки - строка, дальше опять считываем строки пока не получится число (проверяется
errno)если считывается не
char*, аwchar_t*, то использовать надо функцию_wtoi