码迷,mamicode.com
首页 > 其他好文 > 详细

对文件的输入输出

时间:2018-02-01 00:16:49      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:fscanf   输入数据   lsp   存在   define   多少   top   数组   struct   

用fopen函数打开数据文件

fopen函数的调用方式为:fopen(文件名,使用文件方式);返回值为指向文件的指针,通常返回值赋给一个指向文件的指针变量。eg:

FILE *fp;                 //定义指向文件的指针变量fp

fp=fopen(“a1”,”r”);        //表示要打开名字为a1的文件,使用文件方式为

//“只读”,并将fopen函数的返回值赋给指针变量fp

文件使用方式

含义

如果指定的文件不存在

r(只读)

为了输入数据,打开一个已存在的文本文件

出错

w(只写)

为了输出数据,打开一个文本文件

建立新文件

a(追加)

向文本文件尾添加数据

出错

rb(只读)

为了输入数据,打开一个二进制文件

出错

wb(只写)

为了输出数据,打开一个二进制文件

建立新文件

ab(追加)

向二进制文件尾添加数据

出错

“r+”(读写)

为了读和写,打开一个文本文件

出错

“w+”(读写)

为了读和写,建立一个新的文本文件

建立新文件

“a+”(读写)

为了读和写,打开一个文本文件

出错

“rb+”(读写)

为了读和写,打开一个二进制文件

出错

“wb+”(读写)

为了读和写,建立一个新的二进制文件

建立新文件

“ab+”(读写)

为了读和写,打开一个二进制文件

出错

对文件读写字符与字符串

函数名

调用形式

功能

返回值

fgetc

fgetc(fp)

从fp指向的文件读入一个字符

读成功带回所读的字符,失败则返回文件结束标志EOF(即-1)

fputc

fputc(ch,fp)

把字符ch写到文件指针变量fp所指向的文件中

输出成功,返回值就是输出的字符,失败则返回EOF(即-1)

feof

feof(fp)

检查文件尾标志是否被已被读取过

文件尾标志已被读出,则表示文件已结束,返回1,否则返回0

fgets

fgets(str,n,fp)

从fp指向的文件读入一个长度为(n-1)的字符串,存放到字符数组str中

读成功,返回地址str,失败则返回NULL

fputs

fputs(str,fp)

把str所指向的字符串写到文件指针变量fp所指向的文件中

输出成功,返回0;否则返回非零值

#define putc(ch,fp) fputc(ch,fp)

#define getc(fp) fgetc(fp)

这是在stdio.h中定义的,因此在程序中putc,getc和fputc,fgetc作用是一样的。

 

 

用格式化的方式读写文本文件

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

eg:fprintf(fp,”%d,%6.2f”,i,f);

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

eg:fscanf(fp,”%d,%f”,&i,&f);

两个函数作用与printf和scanf类似,只是对屏幕操作改为了对文件操作。

用二进制方式向文件读写一组数据

fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

buffer:是一个地址。

size:要读写的字节数。

count:要读写多少个数据项(每个数据项长度为size)。

fp:FILE类型指针

这两个函数是int型函数,返回值为实际读取到的count的值,即实际输入或输出数据项的个数。

eg1:fread(f,4,10,fp);其中f是一个float型数组名(代表数组首元素地址)。这个函数从fp所指向的文件读入10个4字节的数据,存储倒数组f中。

eg2:

struct Student_type{

    … …

}stud[40];

for(int i=0;i<40;i++)

fread(&stud[i],sizeof(struct Student_type),1,fp);

执行40次循环,每次从fp指向的文件中读入结构体数组stu的一个元素。

同理可以有输出语句:

for(int i=0;i<40;i++)

fwrite(&stud[i],sizeof(struct Student_type),1,fp);

随机读写数据文件

rewind(文件类型指针)

作用是使文件位置标记返回文件开头,同时feof函数的值会恢复为0(假)。此函数没有返回值。eg:rewind(fp);

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

起始点

名字

用数字代表

文件开始位置

SEEK_SET

0

文件当前位置

SEEK_CUR

1

文件末尾位置

SEEK_END

2

“位移量”指以“起始点”为基点,向前移动的字节数。位移量应是long型数据(在数字的末尾加一个字母L,就表示是long型)。eg:

fseek(fp,100L,0);     //将文件位置标记向前移到离文件开头100个字节处

fseek(fp,50L,1);      //将文件位置标记向前移到离当前位置50个字节处

fseek(fp,-10L,2);     //将文件位置标记从文件末尾处向后退10个字节

ftell(文件类型指针)

作用是得到流式文件中文件位置标记的当前位置,用相对于文件开头的位移量来表示。如果调用函数出错,返回值为-1L。eg:long i=ftell(gp);

ferror(文件类型指针)

作用是检测在调用各种输入输出函数时是否出现错误。如果返回值为0(假),则未出错,如果返回一个非零值,表示出错。

注意:对同一个文件每一次调用输入输出函数都会产生一个新的ferror函数值,因此,在调用一个输入输出函数后应立即检查ferror函数的值,否则信息会丢失。在执行fopen函数时,ferror的初始值自动置为0。

clearer(文件类型指针)

作用是使文件出错标志和文件结束表示置为0。只要文件出现读写出错标志,它就一直保留,直到对同一文件调用clearerr函数或rewind函数。假设在调用一个输入输出函数时出现错误,ferror函数值为非零值,应立即调用clearerr(fp),使ferror(fp)的值变成0,以便在进行下一次检测。

对文件的输入输出

标签:fscanf   输入数据   lsp   存在   define   多少   top   数组   struct   

原文地址:https://www.cnblogs.com/limulus/p/8395087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!