1,用fgetc计算一个文件的大小,要求封装成函数
#include <stdio.h>
//获取指定文件的字符数
int get_size(char *name)
{
//打开文件
FILE*fl=fopen(name,"r");
if(NULL==fl)
{
perror("fopen");
return -1;
}
int size=0;
while(fgetc(fl)!=EOF)
{
size++;
}
fclose(fl);
return size;
}
//主函数,提示并输入文件名
int main(int argc, const char *argv[])
{
char name[20];
printf("请输入要查询的文件名:");
scanf("%s",name);
int n;
n=get_size(name);
if(n<0)
{
return -1;
}else
{
printf("该文件有%d个字符\n",n);
}
return 0;
}
代码实现:
2,用fgetc计算一个文件有几行,要求封装成函数(linux操作系统以\n结尾,就算是最后一行也有一个'\n')
//计算文件行数
int get_line(char *name)
{
//打开文件
FILE*fl=fopen(name,"r");
if(NULL==fl)
{
perror("fopen");
return -1;
}
int line=0;
char c;
while((c=fgetc(fl))!=EOF)
{
if(c=='\n')
{
line++;
}
}
fclose(fl);
return line;
}
代码实现
3,用fgets和fputs实现,拷贝一个文件,例如将1.c的内容拷贝给2.c
//复制文件函数
void copy_file(char* name1,char *name2)
{
//打开文件
FILE*fl_r=fopen(name1,"r");
FILE*fl_w=fopen(name2,"w");
if(NULL==fl_r ||NULL==fl_w)
{
perror("fopen");
return;
}
char str[20]="";
while(1)
{
if(fgets(str,sizeof(str),fl_r)==NULL)
break;
fputs(str,fl_w);
fflush(fl_w);
}
fclose(fl_r);
fclose(fl_w);
puts("复制完成");
return;
}
int main(int argc, const char *argv[])
{
char name1[20];
char name2[20];
printf("请输入源文件名:");
scanf("%s",name1);
printf("请输入目的文件名");
scanf("%s",name2);
copy_file(name1,name2);
return 0;
}
代码实现
ubuntu@ubuntu:day1$ ls
1_fputc.c 2_fgetc.c 3_fscanf.c 4_fprint.c 5_flash.c a.out homework.c
ubuntu@ubuntu:day1$ gcc homework.c
ubuntu@ubuntu:day1$ ./a.out
请输入源文件名:1_fputc.c
请输入目的文件名1.c
复制完成
ubuntu@ubuntu:day1$ ls
1.c 1_fputc.c 2_fgetc.c 3_fscanf.c 4_fprint.c 5_flash.c a.out homework.c
ubuntu@ubuntu:day1$ cat 1.c
#include <stdio.h>
int main(int argc, const char *argv[])
{
//打开文件
FILE *fb=fopen("./fputc.txt","a+");
if(NULL==fb)
{
perror("fopen");
return -1;
}
//输入
fputc('a',fb);
fputc('b',fb);
fputc('c',fb);
fclose(fb);
return 0;`
}
4,用fgets计算一个文件的大小,要求封装成函数(命令行传参)
//fgets获取文件字符数
int gets_size(const char *name)
{
//打开文件
FILE*fl=fopen(name,"r");
if(NULL==fl)
{
perror("fopen");
return -1;
}
char str[20]="";
int size=0;
int sum=0;
while(fgets(str,sizeof(str),fl)!=NULL)
{
size=strlen(str);
sum+=size;
}
fclose(fl);
return sum;
}
int main(int argc, const char *argv[])
{
//使用fgetc获取
int n1=get_size(argv[1]);
int n2=gets_size(argv[1]);
printf("使用fgetc:%d\n",n1);
printf("使用fgets:%d\n",n2);
return 0;
}
代码实现
5,用fgets计算一个文件有几行,要求封装成函数(linux操作系统以\n结尾,就算是最后一行也有一个'\n')
//使用fgets计算行数
int fgets_line(const char *name)
{
//打开文件
FILE*fl=fopen(name,"r");
if(NULL==fl)
{
perror("fopen");
return -1;
}
int line=0;
char str[20]="";
while(fgets(str,sizeof(str),fl)!=NULL)
{
int len=strlen(str);
for(int i=0;i<len;i++)
{
if(str[i]=='\n')
{
line++;
}
}
}
fclose(fl);
return line;
}
代码实现