1. 用 fgetc 和 fputc 实现,拷贝一个文件,例如将 1.c 的内容拷贝给 2.c2. 用 fgetc 计算一个文件的大小,要求封装成函数3. 用 fgetc 计算一个文件有几行,要求封装成函数4. 用 fgets 和 fputs 实现,拷贝一个文件,例如将 1.c 的内容拷贝给 2.c5. 用 fgets 计算一个文件的大小,要求封装成函数6. 用 fgets 计算一个文件有几行,要求封装成函数
1.用fgetc和fputc实现,拷贝一个文件,例如将1.c的内容拷贝给2.c
#include <stdio.h>
int main(int argc, const char *argv[])
{
int m,i;
FILE*fp=fopen(argv[1],"r");
FILE*fq=fopen(argv[2],"w");
if (NULL==fp)
{
perror("fopen");
return -1;
}
if (NULL==fq)
{
perror("fopen");
return -1;
}
char c;
c=fgetc(fp);
while(c>=0)
{
printf("%c\t",c);
fputc(c,fq);
c=fgetc(fp);
}
printf("\n");
fclose(fq);
fclose(fp);
return 0;
}
创建文件后测试结果如下:
2. 用fgetc计算一个文件的大小,要求封装成函数
本次功能通过有参无返回值函数实现
#include <stdio.h>
void count(FILE*fp)
{
int m=0;
if (NULL==fp)
{
perror("fopen");
return;
}
char c;
c=fgetc(fp);
printf("该文件内容为:");
while(c!=-1)
{
printf("%c",c);
c=fgetc(fp);
m++;
}
printf("该文件共占有%d字节\n",m);
fclose(fp);
}
int main(int argc, const char *argv[])
{
FILE*fp=fopen(argv[1],"r");
count(fp);
return 0;
}
利用之前创建的txt文件进行测试,结果如下:
、
3. 用fgetc计算一个文件有几行,要求封装成函数
linux操作系统以\n结尾,就算是最后一行也有一个'\n'需要注意。本次通过有参有返回值函数实现该功能。
#include <stdio.h>
int line(FILE *fp)
{
int m=0;
if (NULL==fp)
{
perror("fopen");
return-1;
}
char c;
c=fgetc(fp);
printf("该文件内容为:\n");
while(c!=-1)
{
printf("%c",c);
if (c==10)
{
m++;
}
c=fgetc(fp);
}
fclose(fp);
return m;
}
int main(int argc, const char *argv[])
{
FILE*fp=fopen(argv[1],"r");
int m;
m=line(fp);
printf("共有%d行\n",m);
return 0;
}
4. 用fgets和fputs实现,拷贝一个文件,例如将1.c的内容拷贝给2.c
虽然更改了函数,但实现原理和fgetc类似
include <stdio.h>
int main(int argc, const char *argv[])
{
int m,i;
FILE*fp=fopen(argv[1],"r");
FILE*fq=fopen(argv[2],"w");
if (NULL==fp)
{
perror("fopen");
return -1;
}
char c[20];
while(fgets(c,sizeof(c),fp)!=NULL)
{
printf("%s\n",c);
fputs(c,fq);
}
printf("\n");
fclose(fq);
fclose(fp);
return 0;
}
利用之前创建的文件进行测试,结果如下:
5. 用fgets计算一个文件的大小,要求封装成函数
对之前拷贝文件内容的函数进行修改改后封装到有参有返回值函数中实现计算文件大小的功能。
需要注意 fgets()中的 int size 是最多读取size-1个字节,所以实现该功能需要填入2.
#include <stdio.h>
int count(FILE *fp)
{
int m=0;
if (NULL==fp)
{
perror("fopen");
return -1;
}
char c[10];
while(fgets(c,2,fp)!=NULL)
{
m++;
}
fclose(fp);
return m;
}
int main(int argc, const char *argv[])
{
FILE*fp=fopen(argv[1],"r");
int m=count(fp);
printf("该文件共占%d字节\n",m);
return 0;
}
利用创建好的txt文件进行测试,结果如下:
6. 用fgets计算一个文件有几行,要求封装成函数
原理和统计字节类似,将fgets()中的 int size 由2更改为sizeof(c)即刻实现功能
#include <stdio.h>
int count(FILE *fp)
{
int m=0;
if (NULL==fp)
{
perror("fopen");
return -1;
}
char c[20];
while(fgets(c,sizeof(c),fp)!=NULL)
{
m++;
}
fclose(fp);
return m;
}
int main(int argc, const char *argv[])
{
FILE*fp=fopen(argv[1],"r");
int m=count(fp);
printf("该文件有%d行\n",m);
return 0;
}
利用创建好的txt文件进行测试后结果如下: