例9.2中的程序是按处理文本文件的方式来编写的。在文件内部有一个位置指针,用来指向文件的当前读写字节。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。例9.3将例9.1中的建立的文件A.dat的内容在屏幕上显示。例9.4从A.dat文件中读入一个含10个字符的字符串。例9.6从键盘输入两个学生数据并写入一个文件中,再读出这两个学生的数据显示在屏幕上。......
2023-11-18
在C 语言中,对文件的基本操作包括文件的打开与关闭、文件的读和写等。
1.文件的打开
文件打开后才能进行操作,打开文件可用C 语言提供的函数fopen 实现。
调用fopen 函数的格式如下:其中,“文件指针名”必须是说明为FILE 类型的指针变量;“文件名”是要打开的文件名,可以是字符串常量或是字符数组;“打开文件方式”是指文件的类型和操作要求,如表9.1 所示。
表9.1 文件操作方式
例如:
打开当前目录下的
C.DAT 文件,这是一个二进制文件,只允许进行读操作,并使fp 指针指向该文件。
以读文本方式打开指定路径下的文件。这里的路径字符串中的“\\”是转义字符,表示一个反斜杠。
2.文件的关闭
对于使用fopen 函数打开的文件,在完成文件操作后,都应关闭该文件,以防止文件被误用。“关闭”操作就是使文件指针变量不再与文件相关,不再能通过文件指针操作文件。文件关闭使用库函数fclose,函数格式如下:
例如:
当文件成功关闭,函数返回0,否则返回非0。
应该养成在程序终止前关闭所有文件的习惯,如果不关闭文件将会丢失数据。因为在向文件写数据时,是先将数据输出到缓冲区,待缓冲区充满后才正式输出给文件。如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据丢失。用fclose 函数关闭文件,可以避免这个问题,它先把缓冲区中的数据输出到磁盘文件,然后才释放文件指针变量。
3.字符读写函数
字符读写函数是以字节为单位的读写函数,每次可以从文件读取或者向文件中写入一个字符。
1)写字符函数fputc
该函数实现将一个字符写入指定的文件中,其格式如下:
其中,“字符”就是要往文件上写的字符,它可以是一个字符常量,也可以是一个字符变量;“文件指针”指向的是接收字符的文件。
说明:
(1)被写入的文件可以用写、读写和追加的方式打开,若用写或者读写的方式打开一个已经存在的文件时,文件的原有内容将被清除,从文件首开始写入字符。若使用追加的方式打开文件时,则写入的字符从文件末尾开始存放。被写入的文件如果不存在,则创建新文件。
(2)fputc 函数有一个返回值,若写入成功,则返回写入字符,否则返回一个EOF。
(3)每写入一个字符,文件内部位置指针向后移动一个字符。这里,文件指针和文件内部指针不是一回事。文件指针是指向整个文件,需要在程序中定义,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针就会向后移动,它不需要在程序中定义,而是由系统自动设置。
2)读字符函数fgetc
该函数实现从指定的文件中读取一个字符,其格式如下:
该函数返回值为输入的字符,若遇到文件结束或是出错,则返回EOF(-1)。
说明:
(1)在fgetc 函数调用中,读取的文件必须是以读或者读写方式打开。
(2)读取字符的结果也可以不向字符变量赋值。例如:
(3)每读出一个字符,文件内部位置指针向前移动一个字符。
【例9.1】从键盘输入字符,以输入“*”为止,逐个存到磁盘文件中,并且再读该文件,将写进的字符显示到屏幕上。程序如下:(www.chuimin.cn)
程序运行结果如图9.1 所示。
图9.1 程序运行结果
4.字符串读写函数
1)读字符串函数fgets
函数fgets 用于从指定的文件中读出一个字符串到字符数组中。其调用格式:
这里n 是一个正整数,表示从文件中读出的字符串不超过n-1 个字符,最后一个字符后面添加串结束标志’\0’。读取过程中若遇到换行符或者文件结束标志(EOF),则读取结束。
2)写字符函数 fputs
函数 fputs 用于将一个字符串写入指定的文件。其调用格式:
这里,字符串可以是字符常量,也可以是字符数组或者字符指针。
【例9.2】从键盘输入一个字符串,存到磁盘文件中,并且再读该文件,将写进的字符串显示到屏幕上。程序如下:
程序运行结果如图9.2 所示。
图9.2 程序运行结果
5.文件的数据块读写函数
1)数据块读函数fread()
该函数用于从指定的文件中读取规定大小的数据块,存入指定的内存缓冲区。其调用格式:
其中,p 是指向要输入/输出数据块的首地址的指针;size 是某类型数据存储空间的字节数(数据项大小);n 是从文件中读取的数据项数;fp 是文件指针变量。
2)数据块写函数fwrite()
该函数用于将一固定长度的数据块写入文件中,其调用格式:
说明:p,size,n,fp 的含义与函数fread()相同。
如果函数fread 和fwrite 在调用成功时,则返回值为n 的值,即输入/输出数据项数;如果调用失败(读写出错),则返回0。
6.文件格式化读写函数
文件中的输入/输出和数据的输入/输出基本类似。文件中的输入、输出函数为fprintf 和fscanf,它们都是格式化输入、输出函数。它与printf 和scanf 的区别在于它的读写对象是磁盘文件而不是键盘和显示器。
1)文件格式化输入函数fscanf()
该函数用于按格式对文件进行输入操作。调用格式:
2)文件格式化输出函数fprintf()
该函数用于按格式对文件进行输出操作。调用格式:
如果fcanf 和fprintf 函数调用成功时,则返回输出的字节数;如果调用失败(出错或文件尾),则返回EOF。
有关C语言程序设计实用教程的文章
例9.2中的程序是按处理文本文件的方式来编写的。在文件内部有一个位置指针,用来指向文件的当前读写字节。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。例9.3将例9.1中的建立的文件A.dat的内容在屏幕上显示。例9.4从A.dat文件中读入一个含10个字符的字符串。例9.6从键盘输入两个学生数据并写入一个文件中,再读出这两个学生的数据显示在屏幕上。......
2023-11-18
在C 语言中,具有一定功能、相对独立的程序段称为函数。无论主函数main()位于程序中的什么位置,程序执行时总是从main()开始。C 语言程序的一般结构如图5.1 所示。它具有以下特点:图5.1C 程序中的函数C 语言允许一个程序由多个源文件组成,每个源文件可以独立编译,一个源文件可以被不同的程序使用。一个C 程序有且仅有一个主函数main,主函数可以放在任何一个源文件中,程序总是从主函数开始执行。......
2023-10-21
项目2:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。图3.15兔子问题输出结果根据以上的分析可以知道,循环次数可以为0,因此该程序是一个条件型循环,可以利用while语句编写程序。熟悉了循环结构在程序设计中的运用,循环结构语句包含了while语句、do…......
2023-11-18
但是允许在一个函数的定义中出现对另一个函数的调用,即函数的嵌套调用。图5.9函数嵌套调用与子程序嵌套类似,是在执行主函数main()中调用函数a()的语句时,转去执行函数a();在函数a()中调用函数b()时,转去执行函数b();在函数b()执行完毕,返回函数a()的继续执行;函数a()执行完毕,返回主函数main()。函数嵌套调用举例。图5.11程序运行结果统计一批数据中大于平均值的数据总数。图5.12程序运行结果......
2023-10-21
在C 语言程序中,是通过对函数的调用来执行函数体,其过程与子程序调用相似。在调用函数时,大多数情况下主调函数和被调函数之间有数据传递。图5.2程序运行结果函数调用在程序中起一个表达式或者语句的作用。在调用函数时,有3 种不同的方式。这就要求该函数必须是有返回值的。getchar 函数调用作为表达式使用,即赋值表达式的右操作。......
2023-10-21
在一个C 程序中,有且只能有一个名为main 的函数,该函数称为主函数。程序执行始终是始于主函数,结束于主函数。C 程序中的每个语句都是以分号(;)作为语句结束符的。......
2023-10-21
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
相关推荐