C语言反向读文件的意外输出
Unexpected output for reverse file reading in C language
这是我的代码,但我不知道为什么它只打印部分行。
这是我的代码:
#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 %s\n",argv[1]);
scanf("re-enter file name:%s\n",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);
}
输入文件:
Hrey yhis 将打印两次
打印三次
@为什么不
输出文件
打印三次
@为什么不
所以..基本上我想做的事情实际上是不可能使用 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);
}
这是我的代码,但我不知道为什么它只打印部分行。 这是我的代码:
#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 %s\n",argv[1]);
scanf("re-enter file name:%s\n",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);
}
输入文件:
Hrey yhis 将打印两次
打印三次
@为什么不
输出文件
打印三次 @为什么不
所以..基本上我想做的事情实际上是不可能使用 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);
}