对文件操作之前,必须先打开该文件;操作结束后,应立即关闭文件,以免数据丢失。若打开的文件不存在,则以指定的文件名建立该文件;若打开的文件已经存在,则将该文件删去,重建一个新文件。对二进制文件的读写则不存在这种转换。......
2023-11-18
如果想改变系统默认的读写顺序,即希望对于文件上当前位置以外的某些位置进行操作,可以使用有关对文件指针定位的函数来调整文件指针(读写头)的位置。
1.定位读写指针函数fseek()
fseek()函数的功能是将文件的读写指针从某个位置移到指定的位置,该函数为C语言对文件的随机读写提供了方法。fseek()函数调用格式如下:
fseek(fp,偏移量,起始位置)
其中,fseek是该函数的函数名;fp是指向被操作文件的文件指针;“偏移量”是表示移动当前读写指针的距离量,该参数的类型为long int型;“起始位置”是偏移量的相对位置。例如,起始位置为文件头,偏移量为50,则表示将读写指针移到相对文件头距离50个字节的位置。起始位置的设置方法参见表9.2。
表9.2 文件指针起始位置的设置方法
说明:
0表示相对于文件头;
1表示相对于文件的当前位置;
2表示相对于文件尾。
实际中,常用宏定义来替代起始位置:
SEEK_SEC表示文件头;
SEEK_CUR表示当前位置;
SEEK_END表示文件尾。
例如:
fseek(fp,200L,0); /*将读写指针移到离文件头20个字节处。*/
fseek(fp,80L,1); /*将读写指针移到离当前位置80个字节处。*/
fseek(fp,-50L,0); /*将读写指针移到从文件尾向前50个字节处。*/
该函数一般用于二进制文件。如果将其用于文本文件,则计算位置时会发生误差。
例9.8 建立一个数据文件,随机读取其中的某个数据。(www.chuimin.cn)
使用fprintf()函数建立一个数据文件xy.Dat,然后指定从某个数据起连续读出若干个数据,最后再读出这组数据的起始数据。
该程序先打开一个文件b.txt,以二进制数的读写方式,用for循环语句向文件中写入20个整型数,这里使用的是fprintf()函数。再从键盘上键入一个数值赋给x,表示从文件中第x个数据项开始读取数据,并将它显示在屏幕上。
本程序中,指定从第10个数据项开始,连续读出5个数据项,暂存在变量Y中并输出到显示屏幕上。这里使用fseek()函数进行定位,让读写指针移到第10个数据项,并从该数据项开始输出。程序中又使用fseek()函数重新定位读写指针,使它再指向第10个数据项,再读取该数据,输出显示为10。
2.复位读写指针函数rewind()
rewind()函数的功能是将某个文件的读写指针重置于文件头。该函数的调用格式如下:
rewind(fp);
其中,rewind是该函数的函数名,fp是被操作文件的文件指针。使用该函数后,会使被操作文件的读写指针指向文件头。
例9.9 文件位置指针复位函数rewind()的应用。
程序首先在文件d.txt上依次输出了abc,然后将文件指针移动到文件的开始位置,再输出A,将原来此位置上的a覆盖了,最后文件d.txt的内容为Abc.
3.返回读写指针函数ftell()
ftell()函数的功能是返回指定文件当前读写指针的位置,是用该位置相对于文件头间隔的字节数来表示。例如,该函数返回某个文件的当前读写指针的位置是100字节,即表示当前读写指针在离文件头100个字节处。该函数调用格式如下:
ftell(fp);
它返回一个表示字节数的long int型数值。
例9.10 编写一个程序使用frell()函数估算一个文件的大小。
有关C语言程序设计 第2版的文章
对文件操作之前,必须先打开该文件;操作结束后,应立即关闭文件,以免数据丢失。若打开的文件不存在,则以指定的文件名建立该文件;若打开的文件已经存在,则将该文件删去,重建一个新文件。对二进制文件的读写则不存在这种转换。......
2023-11-18
如果已经结束则返回值为非0值;否则返回0,表示文件尚未结束。例9.11从键盘上输入一个长度小于20的字符串,将该字符串写入文件“file.dat”中,并测试是否有错。......
2023-11-18
C程序中,处理文件数据的过程可以分为3个主要步骤:①打开要处理的文件;②按某种方式处理文件;③关闭文件。表7.1文件模式及意义续表打开或建立指定文件成功时,fopen函数将返回一个文件类型变量的地址,该地址应赋值给FILE类型指针变量;若打开或建立文件失败,fopen函数返回一个空指针值。......
2023-11-20
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
C语言把括号、赋值、强制类型转换等都作为运算符处理,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算,功能强大。另外,C语言还把括号、下标、强制类型转换、取地址等都作为运算符处理,并通过与算数运算符的组合达到不同的目的,从而使程序更加简洁明了。C语言具有超强的可移植性。总之,C语言在运算符方面是比较容易让人混淆的。......
2023-11-18
C语言的最大特点是:功能强、使用方便灵活。由于这个“灵活”给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。在C语言中大写字母和小写字母是两个不同的字符。C语言规定以’\0’作字符串结束标志,它是由系统自动加上的。当一个语句中使用多层括弧时常出现这类错误。main()C语言中对数组的定义或引用数组元素时必须用方括弧。......
2023-11-18
在C 语言中,对文件的基本操作包括文件的打开与关闭、文件的读和写等。表9.1文件操作方式例如:打开当前目录下的C.DAT 文件,这是一个二进制文件,只允许进行读操作,并使fp 指针指向该文件。应该养成在程序终止前关闭所有文件的习惯,如果不关闭文件将会丢失数据。......
2023-10-21
针对不同的实际应用,数据排序方法有很多种。本节介绍两种常用排序方法的基本思想和实现方法,帮助读者初步理解排序方法的计算机解决思路。②不考虑已排好序的数据,将剩下的数据作为待排序列。编写程序实现冒泡排序算法,对随机生成的10个3位整数按升序进行排序并输出。......
2023-11-20
相关推荐