测试结果
ymp@ubuntu:~/px/IO/fp$ ./a.out 2.txt input line>>> 3 qwr asf zxc 1.txt size:12,line:3 1.txt size:12,line:3 ymp@ubuntu:~/px/IO/fp$ cat 1.txt qwr asf zxc ymp@ubuntu:~/px/IO/fp$ cat 2.txt qwr asf zxc ///自己输入1.txt复制到2.txt中,利用两种函数求文件的大小和行数
.c文件
include<stdio.h> #include<string.h> #include<errno.h> #include"a.h" void copy(FILE *fp,FILE *fq) //文件复制函数 { char str[2]; rewind(fp); while(fgets(str,sizeof(str),fp) != NULL) { fputs(str,fq); } } int size_fgets(FILE *fp) //利用fgets求文件大小 { int sum=0; char str[20]; rewind(fp); while(fgets(str,sizeof(str),fp)!=NULL) { sum =strlen(str); } return sum; } int line_fgets(FILE *fp) //利用fgets求文件行数 { int line=0; char str[20]; rewind(fp); while(fgets(str,sizeof(str),fp)!=NULL) { int i; for(i=0;i<sizeof(str);i ) { if(str[i] == '\n') { line ; } } } return line; } int size_fgetc(FILE *fp) //利用fgetc求文件大小 { int sum=0; char c=0; rewind(fp); while(1) { c=fgetc(fp); if(c==-1) { break; } sum ; } return sum; } int line_fgetc(FILE *fp) //利用fgetc求文件行数 { int line=0; char c=0; rewind(fp); while(c!=-1) { c=fgetc(fp); if(c==10) { line ; } } return line; }
main.c函数
#include<stdio.h> #include<errno.h> #include"a.h" int main(int argc,const char *argv[]) { FILE *fp=fopen("./1.txt","w "); if(NULL==fp) { printf("errno=%d\n",errno); perror("fopen"); return -1; } int i=0; int line; printf("input line>>> "); scanf("%d",&line); char str[20]; while(i<line) { scanf(" %s",str); fputs(str,fp); fputs("\n",fp); i ; } printf("1.txt size:%d,line:%d\n",size_fgetc(fp),line_fgetc(fp)); printf("1.txt size:%d,line:%d\n",size_fgets(fp),line_fgets(fp)); FILE *fq=fopen(argv[1],"w "); copy(fp,fq); fclose(fp); }
.h文件
#ifndef __fp__ #define __fp__ void copy(FILE *fp,FILE *fq); int size_fgetc(FILE *fp); int line_fgetc(FILE *fp); int size_fgets(FILE *fp); int line_fgets(FILE *fp); #endif ~ ~