C语言中文件的输入输出

文件的读写

一.fputc函数和fgetc()函数(putc函数和getc()函数)

1.fputc函数

把一个字符写到磁盘文件上去,调用形式:

fputc(ch,fp);成功输出字符,失败EOF(-1)

2.fgetc函数

读入一个字符,该文件必须是以读或以读写方式打开的

调用形式: ch=fgetc(fp);

while(ch!=EOF)
读入字符时,遇到结束符EOF(-1),读取结束,但是有些

二进制数的值正好是-1,就被当作结束符处理,所以提供了

一个feof(fp)来判断是否结束

二.fread函数和fwrite函数

用来读取一组数据,调用形式如下:

fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

buffer:是一个指针,对于fread来说,它是读入一个数

据的存放地址,对fwrite来说,是输出一个数的存放地址

size:要读写的字节数

count:要进行读写多少个size字节的数据项

三.fprintf和fscanf函数

调用格式:

fprintf(文件指针,格式字符串,输出表列);

fscanf(文件指针,格式字符串,输出表列);

用fprintf()和fscanf()函数对磁盘文件的读写,使用方

便,容易理解,但是在输入时要进行ASCII码转换到二进制

形式,输出时将二进制转换成ASCII码,花费时间较多,所

以在内存与磁盘频繁交换的时候,最好不要用这两个函数

四.fputs和fgets函数

fgets是从指定文件读入一个字符串

fputs是向指定文件输入一个字符串

形式如下:

fgets(str,n,fp);

fputs(str,fp);


文件定位

1.rewind函数

使位置指针重新返回文件的开头,此函数没有返回值

调用格式:

rewind(fp);

2.fseek函数

可以实现改变文件的位置

fseek(文件类型指针,位移量,起始点);

位移量要求是long型的数据,所以位移数字末尾要加L

文件开始 SEEK_SET 0
文件当前位置 SEEK_CUR 1
文件末尾 SEEK_END 2

如:fseek(fp,100L,0);一般用于二进制文件

3.ftell函数

得到流式文件中当前位置,如果出错返回-1


出错检验

1.ferror函数

ferror(fp);

在调用输入输出函数时,如果出现错误,除返回值有反应外

,还可以用ferror函数检查,ferror返回0表示没有出错,

返回非0,表示出错

每次调用输入输出函数都会产生一个新的ferror函数值,素

以每次调用输入输出后,立即检查ferror函数值,否则信息

丢失

在执行fopen函数时,ferror函数初始值自动设置成0

2.clearerr函数

作用是使文件错误标志和文件结束标志置0

假如调用输入输出函数时出错,调用clearerr(fp)

后,ferror(fp)的值变成0,只要出现错误标志,就一直保留

,直到对同一个文件调用clearerr函数或者rewind函数或热

河一个输入输出函数

下面是一个例子来说明

#include <stdio.h>

struct test {

char stu[20];
int age;
}stu[2],stu1[2];

//fputc的用法
void putcTest() {

FILE *fp;
char ch;

if ((fp=fopen("c:\\1.txt","a")) == NULL) {

printf("file cannot open\n");

return;
}

ch=getchar();

while (ch!='#') {

putc(ch,fp);
putchar(ch);
ch=getchar();
}

fclose(fp);
}

//getc的用法
void getcTest() {

FILE *fp;
char ch;

if ((fp=fopen("c:\\1.txt","r+")) == NULL) {

printf("cannot open file");

return ;
}

ch=getc(fp);

while(!feof(fp)){
putchar(ch);
ch=getc(fp);
}
putchar(10);
fclose(fp);
}

//fwrite和fread的用法


void fwriteread(){
FILE *fp;
int i;
if((fp=fopen("c:\\1.txt","w+"))==NULL){
printf("cannot open file\n");
return;
}
printf("输入两个学生的信息形如(cuijiantao,23)\n");
for(i=0;i<2;i++){
///
//当输入字符串的时候,后边要用空格和后边的隔开,否则会出现不可估量的错误
scanf("%s %d",stu[i].stu,&stu[i].age);///
///
fwrite(&stu[i],sizeof(test),1,fp);
}

rewind(fp);
for(i=0;i<2;i++){
fread(&stu1[i],sizeof(test),1,fp);
printf("%s %d\n",stu1[i].stu,stu1[i].age);

}
fclose(fp);
}

//fprintf()和fscanf()函数的用法以及fputs() 和fgets()的用法
/用fprintf()和fscanf()函数对磁盘文件的读写,使用方便,容易理解,
//但是在输入时要进行ASCII码转换到二进制形式,输出时将二进制转换成ASCII码,花费时间较多
//所以在内存与磁盘频繁交换的时候,最好不要用这两个函数
void printfscanfTest(){
FILE *fp;
int i=3;
int j;
char s[100];
if((fp=fopen("c:\\1.txt","w+"))==NULL){
printf("cannot open file");
}
fputs("sdfasdf",fp);
//fprintf(fp,"%d",i);
rewind(fp);

//fscanf(fp,"%d",&j);
fgets(s,10,fp);
//printf("%d",j);
printf("%s\n",s);
fclose(fp);
}
void main(){
printfscanfTest();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值