Я видел много сообщений, но не нашел ничего подобного. Я получаю неправильный вывод:
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ...... // may be this is EOF character
Переход в бесконечный цикл.
Мой алгоритм:
- Перейдите к концу файла.
- уменьшить позицию указателя на 1 и прочитать символ персонаж.
- выйти, если мы найдем наши 10 строк или дойдем до начала файла.
- теперь я буду сканировать полный файл до EOF и печатать их//не реализован в коде.
код:
#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{
FILE *f1=fopen("input.txt","r");
FILE *f2=fopen("output.txt","w");
int i,j,pos;
int count=0;
char ch;
int begin=ftell(f1);
// GO TO END OF FILE
fseek(f1,0,SEEK_END);
int end = ftell(f1);
pos=ftell(f1);
while(count<10)
{
pos=ftell(f1);
// FILE IS LESS THAN 10 LINES
if(pos<begin)
break;
ch=fgetc(f1);
if(ch=='\n')
count++;
fputc(ch,f2);
fseek(f1,pos-1,end);
}
return 0;
}
UPD 1:
измененный код: теперь он имеет только 1 ошибку - если на входе есть строки типа
3enil
2enil
1enil
it prints 10 lines only
line1
line2
line3ÿine1
line2
line3ÿine1
line2
line3ÿine1
line2
line3ÿine1
line2
PS:
1. работа над окнами в блокноте ++
-
Это не домашнее задание
-
Также я хочу сделать это, не используя больше памяти или использования STL.
-
Я тренируюсь, чтобы улучшить свои базовые знания, поэтому, пожалуйста, не сообщайте о каких-либо функциях (например, tail -5 tc.)
пожалуйста, помогите улучшить мой код.