我看过很多帖子,但没有找到我想要的东西。
我得到错误的输出:
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ...... // 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;
}
更新 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. 在记事本++中处理windows
这不是作业
我也想在不使用更多内存或使用 STL 的情况下做到这一点。
我正在练习以提高我的基础知识,所以请不要发布任何功能(如tail -5 tc。)
请帮助改进我的代码。