Вопрос по потокам в C++ (fstream)
#include <fstream>
#include <iostream>
using namespace std;
void main(int argc, char* argv[])
{
const char* path = "test.txt";
char tmp;
fstream fs(path, ios::in | ios::out);
if (!fs)
cout << "Err";
else
{
while (fs >> tmp)
{
if (tmp == '!' || tmp == '?')
{
fs.seekg(-1, fs.cur);
fs << '.';
fs.seekg(1);
}
}
}
return;
}
Собственно сам вопрос,была задача поменять ! и ? на точки,а спорный момент появился на строчке fs.seekg(1);
Препод сказал,что это лишнее,да и по смыслу тоже.Эта команда двигает маркер на 1 вправо(?),но без него у меня текст в файле зацикливается до бесконечности, пример
Есть файл с текстом qwe!!!,с этой строчкой нормально все,вывод -> qwe... ,а без нее вывод-> qwe.we.we.we.we.we.we.we.we.we.we.we.we.we.we.we. и дальше так,как это работает или у меня настройки какие стоят в визуалке,что это так работает
Ответы (1 шт):
Вместо
fs << '.';
напишите
fs << '.' << flush;
чтоб он у вас понимал, что файл изменился, и сбрасывал буфер. Тогда ваш fs.seekg(1); не нужен.
Еще - по-хорошему, следовало бы добавить после открытия
fs.unsetf(fs.skipws);
чтоб читать и пробелы тоже...