-
用fgetc计算一个文件的大小,要求封装成函数
int size(FILE *stream)
{
int sum=0;
char c;
while(1)
{
c=fgetc(stream);
if(EOF == c)
break;
sum++;
}
return sum;
}
int main(int argc, const char *argv[])
{
if(argc<2)
{
printf("重新输入\n");
return -1;
}
FILE *fp=fopen(argv[1],"r");
//调用计算函数
int s=size(fp);
printf("%d\n",s);
fclose(fp);
return 0;
}
2.用fgetc计算一个文件有几行,要求封装成函数(linux操作系统以\n结尾,就算是最后一行也有一个'\n')
#include<stdio.h>
int line(FILE *stream)
{
int line=0;
char c;
while(1)
{
c=fgetc(stream);
if( EOF == c)
break;
if(c == '\n')
line++;
}
return line;
}
int main(int argc, const char *argv[])
{
if(argc < 2)
{
printf("请输入文件\n");
return -1;
}
FILE *fp = fopen(argv[1],"r");
int l=line(fp);
printf("%d\n",l);
fclose(fp);
return 0;
}
3.用fgets和fputs实现,拷贝一个文件,例如将1.c的内容拷贝给2.c
#include<stdio.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
if(argc < 3) //地址传参
{
printf("请输入文件名\n");
return -1;
}
FILE *fp_r = fopen(argv[1],"r"); //打开要读取的文件
if(NULL == fp_r)
{
perror("fp_r");
return -1;
}
FILE *fp_w = fopen(argv[2],"w"); //打开/创建要写入的文件
if(NULL == fp_w)
{
perror("fp_w");
return -1;
}
//读取并写入
char c[2];
while(1)
{
if(fgets(c,sizeof(c),fp_r) == NULL)
break;
printf("%s",c);
fputs(c,fp_w);
fflush(stdout);
}
fclose(fp_w); //关闭文件
fclose(fp_r);
return 0;
}
4.用fgets计算一个文件的大小,要求封装成函数
#include<stdio.h>
int fsize(FILE *stream)
{
int sum = 0;
char c[2];
while(1)
{
if(fgets(c,sizeof(c),stream) == NULL) //选取两个值的数组来计数
break;
sum++;
}
return sum;
}
int main(int argc, const char *argv[])
{
if(argc < 2)
{
printf("重新输入\n");
return -1;
}
FILE *fp = fopen(argv[1],"r");
int sum=fsize(fp); //函数调用
printf("%d\n",sum);
fclose(fp);
return 0;
}
5.用fgets计算一个文件有几行,要求封装成函数(linux操作系统以\n结尾,就算是最后一行也有一个'\n')
#include<stdio.h>
int fline(FILE *stream)
{
int line = 0;
char c[2];
while(1)
{
if(fgets(c,sizeof(c),stream) == NULL) //判断跳出
break;
if(c[0] == '\n') //判断一行
line++;
}
return line;
}
int main(int argc, const char *argv[])
{
if(argc < 2)
{
printf("请输入文件名\n");
return -1;
}
FILE *fp = fopen(argv[1],"r");
int line = fline(fp); //主函数中调用
printf("%d\n",line);
fclose(fp);
return 0;
}