Задать вопрос
@FarmaCeduS

Почему не работает код с++?

Всем привет. Ребят, подскажите пожалуйста почему не работает код. Задача сделать программу которая будет инвертировать текст, т.е. загружать исходный с 1 файла и сохранять инвертированный в файл 2. Я написал вот такой код, но он не работает.

#include <iostream>
#include <fstream>
using namespace std;

int main ()
{
	int temp;
	setlocale (LC_ALL, "Russian");
	char buf1;
	ifstream in ("1.txt", ios::in|ios::binary);
	ofstream out ("2.txt", ios::out|ios::binary);
	
	if (!in)
	{
		cout << "Fail open 1 fail";
		abort ();
	}
	if (!out)
	{
		cout << "Fail open 2 fail";
		abort ();
	}
	in.seekg (0,ios::end); //получаем размер входящего файла для создания цикла
	temp = in.tellg ();
	in.seekg (ios::end); //устанавливаем указатель для считывания входящего файла с конца
	out.seekp (ios::beg); // устанавливаем указатель для записи считанного байта в файл №2
	for (int i=0; i < temp; i++) //запускаем цикл считывания и записи.
	{
		in.get (buf1);
		out.put (buf1);
		in.seekg (-1, ios::cur); //устанавливаем указатель входящего файла на -1 байт от текущего положения (текущее должно быть конец входящего файла)
		
	}

return 0;
}
  • Вопрос задан
  • 593 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
in.seekg (ios::end);
Чтобы прочесть последний символ, стоять надо не в конце, а на один символ раньше. В вашем случае читать уже нечего.

in.seekg (-1, ios::cur);
Этим вы только отшагнёте обратно на один символ, который только что прочли.

Если файлы невелики, проще будет прочесть его весь прочесть в std::vector, а потом просто скопировать в выходной файл:

std::vector<char> cts;
in.seekg(0, in.end);
cts.resize(in.tellg());
in.seekg(0, in.beg);

in.read(&ctr[0], ctr.size());

std::ostream_iterator<char> out_it(out);
std::copy(cts.rbegin(), cts.rend(), out);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы