У вас правильная идея. Что вы упускаете, так это то, что если вы хотите написать перевернутые строки, вам нужно либо написать их внутри цикла, либо сохранить их для последующего использования. Вы не делаете ничего из этого.
В настоящее время происходит перезапись line
каждого цикла. И то, что осталось в этой строке - это то, что вы пишете потом. Оказывается, для вашего случая это пустая строка.
Давайте внесем минимальные изменения в то, что у вас есть:
// (*) Open the output file before looping
ofstream mbrapsht("C:/fajllat/f3.bin", ios::out);
for (int i = 1; !par2.eof() ; i++)
{
getline(par2, line);
if (i < 5 || i > 14) continue;
line = string(line.rbegin(), line.rend());
// (*) output the line - you also probably want an end-of-line
mbrapsht << line << std::endl;
}
Теперь все в порядке. Но у него есть проблема, когда в случае сбоя getline
ваш код по-прежнему выполняет тело цикла еще раз. Это происходит, если getline
достигает конца файла (или какого-либо другого состояния ошибки), которое ваш цикл не принимает до следующей итерации (или, возможно, никогда, если ошибка не EOF).
Итак, несколько лучший выбор может быть:
for(int lineNo = 1; std::getline(par2, line); ++lineNo)
{
if (lineNo >= 5 && lineNo <= 14)
{
std::reverse(line.begin(), line.end()); // (*) requires <algorithm>
mbrapsht << line << std::endl;
}
}
Обратите внимание, что я также инвертировал ваше условие проверки и удалил continue
. В общем, я избегаю циклов continue
и break
, если их не использовать, в результате получается код, который трудно понять или понять с первого взгляда. Это стиль / ремонтопригодность. Возьми или оставь.