Возникла такая проблема, что при считывании 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> использовать нельзя
Заранее благодарю!
getline, а каждую нечетную строку переводить в число? – Zhihar Oct 24 '21 at 10:46string... – Harry Oct 24 '21 at 10:52<string>нельзя использовать – DiHASTRO Oct 24 '21 at 17:5620\nabcde
– DiHASTRO Oct 24 '21 at 17:57atoi– Zhihar Oct 24 '21 at 20:16\nвместе, дочитывать до 10 из следующей строки, не читать вообще? Задача поставлена неоднозначно и неаккуратно. Кстати, @Zhihar просто не написал, что делать в этом случае, и какого размера буфер брать для считывания строки. А у вас проблемка в том, что в вашем исходнике можно читать не более чем число символов, на 1 меньшее, чем в числе в предыдущей строке. – Harry Oct 25 '21 at 05:16while (!fin.eof()) {, за которую лично я готов бить клавиатурой по голове — до такой степени часто встречается эта ошибка, что хоть пиши в комитет по стандартизации, пусть стандарт переделывают... https://ru.stackoverflow.com/q/833980/195342 – Harry Oct 25 '21 at 05:20