C语言中反向读取文件的意外输出



这是我的代码,但我不知道为什么它只打印一些行的一部分。下面是我的代码:

#include<stdio.h>
#include<sys/types.h>
#include<fcntl.h>
int main(int argc,char *argv[])
{
FILE *fpr,*fpw;
int cnt=0;
fpw=fopen(argv[2],"w+");
char buff[1000];
while((fpr=fopen(argv[1],"r"))==NULL)
{
printf("nCan't open file %sn",argv[1]);
scanf("re-enter file name:%sn",argv[1]);
}

while (!feof(fpr))
{

fgets(buff,2,fpr);
if(buff[0]=='n')
{
putc(buff[0],fpw);
fseek(fpw,0,SEEK_SET);

}
fputs(buff,fpw);
cnt++;
}

fclose(fpr);
fclose(fpw);

}

输入文件:

让我们打印三次

@why不输出文件

打印三次@why不是

所以…基本上,我试图做的事情实际上是不可能使用lseek/fseek。所以我找到了另一种方法,如下面的代码所示:

#include <stdio.h> 
#include <string.h> 
#include<stdlib.h>
int main(int argc,char *argv[])
{
FILE* fr;
FILE* fw;
int l=0;
char lines[10000][100];
if( ( (fr=fopen(argv[1],"r+"))==NULL || (fw=fopen(argv[2],"w+"))==NULL )  )
{
printf("Error reading or opening files %s,%s",argv[1],argv[2]);
}
while(fgets(lines[l++], sizeof(lines[l]), fr)!=NULL);

while(l>=0)
fputs(lines[l--],fw);

fclose(fr);
fclose(fw);
}

最新更新