例9.2中的程序是按处理文本文件的方式来编写的。在文件内部有一个位置指针,用来指向文件的当前读写字节。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。例9.3将例9.1中的建立的文件A.dat的内容在屏幕上显示。例9.4从A.dat文件中读入一个含10个字符的字符串。例9.6从键盘输入两个学生数据并写入一个文件中,再读出这两个学生的数据显示在屏幕上。......
2023-11-18
前面章节讨论了将数据写入文件和从文件中读取数据的方法。在文件处理中还有两个重要的应用范畴:
·对写入文件中数据是否正确的判断;
·文件内容的更新(修改)。
在上述两方面应用的文件数据处理中,文件操作的模式应该是“读写”文件。所谓“读写”文件,就是既可以从文件中读取数据,也可以将数据写入文件的那类文件。“读写”文件的打开模式有两大类:读为主的读写类模式和写为主的读写类模式。
读为主的读写类模式包括:"r+""rb+"两种模式,用这类模式打开文件后,其读写位置指针首先是读指针。对文件数据的第一个具体操作必须是读数据的操作,否则会出错。
写为主的读写类模式包括:"w+""wb+""a+""ab+"4种模式,用这类模式打开文件后,其读写位置指针首先是写指针。对文件数据的第一个具体操作必须是写数据的操作,否则会出错。
在C语言中,用同一个数据来表示内部读或者写的位置(即文件的内部读写位置指针是同一个)。在对文件数据读写时,必须确认读写位置指针的性质是“读位置指针”还是“写位置指针”。只有当读写位置指针的性质是“读位置指针”时,才能在该位置上进行读文件数据的操作;同样,也只有当读写位置指针的性质是“写位置指针”时,才能在该位置上进行写入文件数据的操作。
在对读写类文件的操作中,C标准库函数fseek不但可以移动文件的内部读写位置指针,而且fseek每次移动记录指针后就切换文件内部读写位置指针的读/写性质(原来是“读位置指针”则切换为“写位置指针”,原来是“写位置指针”则切换为“读位置指针”)。下面通过两个示例展示文件“读写”模式的使用方法。
【例7.16】 现有一批重要的整型数据要写入文件data.txt中,为了保证文件数据写入的正确性,要求在程序中对写入文件的数据进行校验。数据校验正确显示“OK”,然后继续写入下一个数据;数据校验错误则显示“ERROR”,结束程序运行。(www.chuimin.cn)
上面程序用"w+"模式打开文件,对文件的第一个操作必须是写入数据。写入数据后,为了验证是否写入正确,使用语句fseek(f,-3,SEEK_CUR);将位置指针移回写入数据前的位置(此时位置指针的性质切换为“读位置”),然后读出刚才写入的数据,与原数据进行比较。写入数据正确时,显示提示信息“OK”,然后使用语句fseek(f,0,SEEK_CUR);将位置指针的性质切换为“写位置”,此时才能进行下一轮数据的写入。
【例7.17】 编写程序实现功能:将指定文本文件中的所有小写英文字母转换为大写字母,其余字符保持不变。
程序运行时,从文件中依次读取字符处理:当读到的是非英语小写字母时,直接读取下面一个字符;当读取到的是英语小写字母时依次进行下面的操作:
①将读取到的英语小写字母转换为大写字母(变量c的值减32);
②将文件读写位置指针移回一个字符位置(原来读取该字符的位置),同时将文件内部读写位置指针从“读位置指针”切换成“写位置指针”;
③将转换后的字符数据写回文件;
④用函数调用fseek(fp,0,SEEK_CUR)将文件内部读写位置指针从当前位置移动0个字节,即保持读写指针位置不动、将文件内部读写位置指针从“写位置指针”切换为“读位置指针”,以便正确地进行下一次数据读取操作。
有关C语言程序设计基础(第3版)的文章
例9.2中的程序是按处理文本文件的方式来编写的。在文件内部有一个位置指针,用来指向文件的当前读写字节。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。例9.3将例9.1中的建立的文件A.dat的内容在屏幕上显示。例9.4从A.dat文件中读入一个含10个字符的字符串。例9.6从键盘输入两个学生数据并写入一个文件中,再读出这两个学生的数据显示在屏幕上。......
2023-11-18
在C 语言中,对文件的基本操作包括文件的打开与关闭、文件的读和写等。表9.1文件操作方式例如:打开当前目录下的C.DAT 文件,这是一个二进制文件,只允许进行读操作,并使fp 指针指向该文件。应该养成在程序终止前关闭所有文件的习惯,如果不关闭文件将会丢失数据。......
2023-10-21
二进制文件的特点是存储效率较高,但不便于程序中直观地进行数据处理。非缓冲文件系统指的是不由系统开辟文件缓冲区,而是由程序员为用到的每个文件设置数据缓冲区,并自行对文件缓冲区进行管理。C语言中,用一个系统已经构造好的文件类型变量来保存这些信息。......
2023-11-20
在C程序中,可以通过标准库函数fgetc和fputc实现在文件中单个字符(字节)数据的读写。函数fputc的功能是将用变量c表示的字符数据写到与文件指针stream相关联的文件中去,写入数据的位置由文件的读写位置指针指定,fputc函数执行成功时返回被输出的字符值,当函数执行发生错误时则返回EOF(-1)。编写程序实现功能:将从键盘上输入的若干字符数据写入文本文件mydata.txt。编写程序实现功能:统计一篇英文文章中单词的个数。......
2023-11-20
所谓“文件包含”是指一个源文件可以将另一个源文件的全部内容包含到自己的文件中。文件包含命令的一般形式是:#include"文件名"它的作用是用指定文件的全部内容来代替本文件中的这一行。文件包含命令的解释如图6.1所示。在程序中,文件包含是很有用的。为了解决这个问题,可以把它们单独放在一个文件中,其他文件在开头都使用文件包含命令将它们包含进来。文件包含命令中的文件名,除了用双引号外,也可以用尖括号括起来。......
2023-11-18
程序设计时,可以通过下面3种常用方法组织多源文件C程序:·单独编译每一个源程序文件,然后用连接程序对编译好的目标文件进行连接构成执行文件。使用文件包含组合多源文件C程序示例。①源程序文件isprime.c的内容如下:②源程序文件ReverseOrderNnumber.c的内容如下:③求指定区间中所有“绝对素数”的C程序如下:在上面程序中,用文件包含方式将含有“求倒序数”功能和“判定素数”功能的源程序文件嵌入到程序ex0904.c中,构成了一个解决问题的完整C程序。......
2023-11-20
在C程序中,可以通过标准库函数fgets和fputs对文件中的字符串数据进行读写。函数fgets的返回值为s对象的首地址,若直接读到文件结尾标志或操作出错时则返回NULL。为了将输入的字符串分隔开,结合fgets函数在读到'\n'时会结束一次函数调用的特点,在每个字符串写入文件后再用fputc函数在字符串后写入一个换行符'\n',用以分隔写入的字符串数据。编写程序实现功能:打开例5.5创建的数据文件,将文件中的字符串数据读出并显示在屏幕上。......
2023-11-20
对于嵌套的结构体类型变量,访问其成员时应采用逐级访问的方法,直到获得所需访问的成员为止。利用结构体变量作函数参数,实现计算某学生3门课程平均成绩的功能。......
2023-11-20
相关推荐