c语言所有读写函数的对比,C语言文件读写函数的对比介绍

初识C语言时,对文件输入输出模块并没有仔细去看,大致浏览了一遍就这样翻过去了 因为考试也不考,所以何必费那些闲工夫啊! 现在看来,C语言的文件输入输出模块对于一名程序员来说是非常有用的东西,没有这些,所有的操作只能说是纸上谈兵,关机之后统统的见鬼去了!近来想想,C语言这东西,挺适合自己自学的,并不是说明个人资质不错,只是学校教的东西,完全可以自己从书上获取,重要的是我们要用自己的双手成就自己的程序! 只有自己亲自实践过,才有自己的体会,这些东西可是灰常重要的!  好了,开始正题!

一、fgetc()与fputc()

#include "stdio.h"

#include "stdlib.h"

void writefile(FILE *fp)

{

char ch;

printf("请输入文件内容,以#结束! \n");

ch=getchar();

while(ch!='#')

{

fputc(ch,fp);                                    // fputc(ch,fp)

ch=getchar();

}

rewind(fp);

}

void readfile(FILE *fp)

{

char ch;

printf("读取文件内容:\n");

ch=fgetc(fp);

while(!feof(fp))

{

putchar(ch);

ch=fgetc(fp);                                    // ch=fgets(fp)

}

printf("\n文件读取结束\n");

}

int main()

{

FILE * fp;

char inputfile[20];

printf("请输入文件名:");

gets(inputfile);

fp=fopen(inputfile,"w+");

if(fp==NULL)

{

printf("打开文件失败!");

exit (1);

}

else

{

printf("打开%s成功!\n",inputfile);

}

writefile(fp);

readfile(fp);

fclose(fp);

return 0;

}

●  fgetc()格式 变量=fgetc(文件指针) fputc()格式 fput(字符量,文件指针)

●  若读写失败,都会返回符号常量EOF(在stdio.h中定义),值为-1

●  getc()与fgetc()功能相同,putc()与fputc()功能相同

二、fgets()与fputs()

#include "stdio.h"

#include "stdlib.h"

int main()            //编程实现文件的复制

{

FILE *fp;

char str[100],s[100],filename[50];

printf("请输入字符串:\n");

gets(str);

printf("请输入文件所在路径及名称:\n");

scanf("%s",filename);

if((fp=fopen(filename,"ab"))!=NULL)

{

fputs(str,fp);                              // fputs(str,fp)  把字符串str写入到文件中

fclose(fp);

}

else

{

printf("打开失败!");

exit(0);

}

if((fp=fopen(filename,"rb"))!=NULL)

{

printf("%s文件的内容是:\n",filename);

while(fgets(s,sizeof(s),fp))                // fgets(str,n,fp)  从文件读出n-1字符串到str

{

printf("%s",s);

}

fclose(fp);

}

return 0;

}

●  调用格式 fgets(字符数组名,n,文件指针) fputs(字符串,文件指针)

●  fgets()会把n-1个字符复制到字符数组里,而不是n个

三、fscanf()与fprintf()

#include "stdio.h"

#include "stdlib.h"

struct rec

{

char id[10];

char name[20];

float price;

int count;

};

// 将键盘输入的信息写到文件中

void writefile(FILE *fp,int n)

{

int i;

struct rec record;                                         // 用作缓冲

printf("******************请输入商品数据********************\n");

for(i=0;i

{

printf("请输入序号:");

scanf("%s",record.id);

printf("请输入名称:");

scanf("%s",record.name);

printf("请输入价格:");

scanf("%f",&record.price);

printf("请输入数量:");

scanf("%d",&record.count);

fprintf(fp,"%s  %s  %.2f    %d \n",record.id,record.name,record.price,

record.count);

}

}

// 从文件读出商品信息

void readfile(FILE *fp,int n)

{

struct rec record;                                       // 用作缓冲

double total =0;

rewind(fp);

while(fscanf(fp,"%s %s %f %d\n",record.id,record.name,

&record.price,&record.count)!=EOF)

{

printf("序号:%s 名称:%s 价格:%5.2f 数量:%d \n",record.id,record.name,

record.price,record.count);

total=total+record.price*record.count;

}

printf("合计:%5.2f",total);

}

int main()

{

char filename[20];

int n;

FILE * fp;

printf("请输入目标文件:\n");

scanf("%s",filename);

printf("请输入商品数量:\n");

scanf("%d",&n);

fp=fopen(filename,"w+");

if(fp==NULL)

{

printf("打开文件失败!");

exit(1);

}

writefile(fp,n);

readfile(fp,n);

fclose(fp);

return 0;

}

●  调用格式 fscanf(文件指针,格式字符串,输入参数)  如:fscanf(fp,"%d %s",&i,str)

fprintf(文件指针,格式字符串,输出参数列表) 如:fprintf(fp,"%d %s",i,str)

●  该程序在主函数完成打开、关闭文件 在被调函数中定义缓冲结构体用于数据的输入输出

四、fread()与fwrite()

#include "stdio.h"

#include "stdlib.h"

struct rec

{

char id[10];

char name[20];

float price;

int count;

};

// 将键盘输入的信息写到文件中

void writefile(FILE *fp,int n)

{

int i;

struct rec record;                                         // 用作缓冲

printf("******************请输入商品数据********************\n");

for(i=0;i

{

printf("请输入序号:");

scanf("%s",record.id);

printf("请输入名称:");

scanf("%s",record.name);

printf("请输入价格:");

scanf("%f",&record.price);

printf("请输入数量:");

scanf("%d",&record.count);

// fprintf(fp,"%s  %s  %.2f    %d \n",record.id,record.name,record.price,

//      record.count);

fwrite(&record,sizeof(record),1,fp);

}

}

// 从文件读出商品信息

void readfile(FILE *fp,int n)

{

struct rec record;                                       // 用作缓冲

double total =0;

rewind(fp);

// while(fscanf(fp,"%s %s %f %d\n",record.id,record.name,

//          &record.price,&record.count)!=EOF)

while(fread(&record,sizeof(record),1,fp))

{

printf("序号:%s 名称:%s 价格:%5.2f 数量:%d \n",record.id,record.name,

record.price,record.count);

total=total+record.price*record.count;

}

printf("合计:%5.2f",total);

}

int main()

{

char filename[20];

int n;

FILE * fp;

printf("请输入目标文件:\n");

scanf("%s",filename);

printf("请输入商品数量:\n");

scanf("%d",&n);

fp=fopen(filename,"ab+");

if(fp==NULL)

{

printf("打开文件失败!");

exit(1);

}

writefile(fp,n);

readfile(fp,n);

fclose(fp);

return 0;

}

●  格式 fwrite(buffer,size,count,fp) fread(buffer,size,count,fp)

●  buffer 存放输入输出数据的首地址 size 数据块的大小(字节数) count 数据块的个数

●  读写成功返回值都是count的值 失败返回0 可以依据此判断文件是否读写结束

Summary:

1. fgetc与fputc 用于读写单个字符

2. fgets与fputs 用于读写一个字符串

3. fscanf与fprintf 用于格式化读写数据块

4. fread与fwrite 用于非格式化读写二进制文件

阅读(146) | 评论(0) | 转发(0) |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值