Я использую эту программу, чтобы изменить каждую гласную в text.txt, чтобы она стала хэштегом ('#')
#include <fstream>
#include <iostream>
int main()
{
std::fstream iofile{ "text.txt", std::ios::in | std::ios::out };
char chChar;
while (iofile.get(chChar))
{
switch (chChar)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
iofile.seekp(-1, std::ios::cur);
iofile << '#';
iofile.seekg(iofile.tellg(), std::ios::beg);
}
}
}
Итак, если исходное содержимое text.txt -
something is funny
Он превратится в
s#m#th#ng #s f#nny
Проблема в этой строке
iofile.seekg(iofile.tellg(), std::ios::beg);
Эта строка сохраняет указатель файла в том же положении, поэтому я подумал, что могу изменить строку на эту
iofile.seekg(0, std::ios::cur);
Я думал, что это сделает то же самое, но этого не произошло. Когда я запускаю программу, консоль просто останавливается и не останавливается, а text.txt начинает печатать странные вещи. Но когда я заменяю его этой строкой, он снова работает
iofile.seekg(1, std::ios::cur);
Я подумал, что это должно переместить указатель файла слишком далеко (мы должны оставить его в этом положении, но здесь мы перемещаем его, передавая 1 букву). Однако это работает. Что происходит?