在C程序中,可以通过标准库函数fgets和fputs对文件中的字符串数据进行读写。函数fgets的返回值为s对象的首地址,若直接读到文件结尾标志或操作出错时则返回NULL。为了将输入的字符串分隔开,结合fgets函数在读到'\n'时会结束一次函数调用的特点,在每个字符串写入文件后再用fputc函数在字符串后写入一个换行符'\n',用以分隔写入的字符串数据。编写程序实现功能:打开例5.5创建的数据文件,将文件中的字符串数据读出并显示在屏幕上。......
2023-11-20
在C程序中,可以通过标准库函数fgetc和fputc实现在文件中单个字符(字节)数据的读写。这两个函数的原型分别为:
int fgetc(FILE*stream);
int fputc(int c,FILE*stream);
函数fgetc的功能是从与文件指针stream相关联的文件中读取一个字符(字节)数据,读取数据的位置由文件的内部读写位置指针指定,fgetc函数执行成功时返回其读取的字符,当执行fgetc函数时遇到文件结束符或者在执行中出错时返回EOF(-1)。
函数fputc的功能是将用变量c表示的字符数据写到与文件指针stream相关联的文件中去,写入数据的位置由文件的读写位置指针指定,fputc函数执行成功时返回被输出的字符值,当函数执行发生错误时则返回EOF(-1)。
【例7.1】 编写程序实现功能:将从键盘上输入的若干字符数据写入文本文件mydata.txt。(提示:需要结束键盘输入时,输入ctrl+z(EOF)后按回车键)
上面程序运行时,首先建立/打开了名为mydata.txt的文本文件(注意到文件模式用的是"w",所以当指定的文件不存在时会创建一个新文件,如指定的文件已经存在则会将其打开,然后删除文件中原有的全部数据内容),然后将键盘上提供的字符序列依次写入文件中。
【例7.2】 编写程序实现功能:从文件mydata.txt(程序ex0501.c创建)中读出所有字符数据,并在系统标准输出设备显示器上输出。
上面程序运行时,首先打开了名为mydata.txt的文本文件(注意文件模式用的是"r",所以当指定的文件不存在或是指定的路径不对时都不能正确打开文件),然后用字符(字节)的方式依次读出文件中的所有字符并在显示器上显示。
【例7.3】 编写能够实现文件复制功能的程序。文件名在程序运行时从键盘提供,要求:(www.chuimin.cn)
①文件数据复制部分使用单独的函数实现。
②程序既能实现文本文件的复制,又能够实现二进制文件的复制。
上面程序运行时,首先使用两个字符数组接收键盘上提供的文件名,然后使用它们打开了两个被操作的文件(注意打开文件时用变量的形式表示的文件名)。然后调用函数filecopy实现文件复制工作。具体实现复制功能时,调用函数fgetc(in)从源文件读出一个字节的数据到变量ch中,然后调用函数feof(in)判断读出的是文件中的有效数据还是文件结尾符,如果是有效数据则调用函数fputc(ch,out)将ch中的内容写入目标文件,然后再读出下一个文件数据;如果读出的不是有效数据(此时feof(in)调用的值为非0),则表示已经读到了文件尾,通过break语句退出循环,结束复制过程。返回主函数后关闭两个文件,当关闭目标文件(写的文件)时,系统会在文件数据末尾为文件做一个结尾符号。
函数filecopy中实现文件内容复制部分的代码段切忌写成下面表示的形式:
while(!feof(in))
fputc(fgetc(in),out);
使用这种表示形式,看似比较简洁,也没有语法错误,而且也可以进行文件内容的复制工作。但被复制生成的文件内容会比源文件多出一个字节来,究其原因是因为在这段代码的操作过程中违反了计算机程序设计中“写类”操作应该先判断是否能够写,然后再执行写操作的原则,将源文件中的文件结尾符号写入目标文件后才判断是否遇到了源文件中的文件结束标志。在最后执行文件关闭函数调用时又写了一个文件结束标志,因而在复制生成的目标文件中会多出一个字节来。
【例7.4】 编写程序实现功能:统计一篇英文文章(文本文件)中单词的个数。
上面程序中的标准库函数isalpha的功能是判断其参数ch是否是英文字母,ch是英文字母时返回非0值,否则返回0值。程序中使用变量compart作为单词分隔符标志,当读到单词分隔符(非英文字母)时置1(compart=1),代表上一个单词的结束(或者还没进入下一个单词),当遇到单词的首字符时统计单词数,同时将标志变量compart置0以保证每个单词只统计一次。
有关C语言程序设计基础(第3版)的文章
在C程序中,可以通过标准库函数fgets和fputs对文件中的字符串数据进行读写。函数fgets的返回值为s对象的首地址,若直接读到文件结尾标志或操作出错时则返回NULL。为了将输入的字符串分隔开,结合fgets函数在读到'\n'时会结束一次函数调用的特点,在每个字符串写入文件后再用fputc函数在字符串后写入一个换行符'\n',用以分隔写入的字符串数据。编写程序实现功能:打开例5.5创建的数据文件,将文件中的字符串数据读出并显示在屏幕上。......
2023-11-20
函数fwrite的功能则是将内存储器中指定区域的数据块写入与文件指针stream相关联的文件中。将一个5×10的整型二维数组数据存入指定文件中。编写程序实现功能:将例7.10所创建文件中的数据读出,并将数据按5行10列的矩阵形式进行显示。由于要接收从文件中读出的二维数组数据,程序中需要定义构成方式与之对应的二维数组。......
2023-11-20
在文件in.txt中有两个用逗号分开的整数,请编写程序求出这两个整数之间的所有素数,并将求出的素数依次写到文件out.txt中。②写入文件out.txt中的数据用空格分隔。在需要按某种格式处理文件数据的程序中,特别要注意正确书写格式控制字符串中的输入输出控制格式,请读者参照程序中注释进行分析理解。......
2023-11-20
图4.9字符数组初始化状态③ 如果字符数组的元素个数与初值相同,可在定义时省略数组长度。图4.11程序运行结果4.字符串字符串:是用双引号括起来的字符序列,也称为字符串常量。图4.13存储状态用printf 函数以格式符%s 输出字符串时,首先按字符数组名找到数组起始地址,然后从起始地址开始逐个输出其中的字符,直到遇上字符串结束符‘\0’时为止。......
2023-10-21
表2.3转义字符表2.3中’\ddd’表示将1~3位数转换成ASCII码值所对应的符号。例2.3转义字符的使用。图2.2例2.3输出结果2.字符变量字符变量用来存放字符常量,并且只能放一个字符。字符变量的使用方式如下:例2.4向字符变量赋值。例2.5字符输入输出函数的使用这个程序运行过程中,从键盘输入任意两个字符,并把第一个字符赋给变量b,第二个字符赋给变量c,最后输出变量a,b,c的值。......
2023-11-18
前面已经讨论了数组的输入输出,采用循环结构同样可以实现字符数组的输入输出。程序设计中常常希望将字符串作为整体进行输入输出处理,C标准库中提供了专门用于字符串输入输出的函数。字符串输入输出示例。......
2023-11-20
前面章节讨论了将数据写入文件和从文件中读取数据的方法。在上述两方面应用的文件数据处理中,文件操作的模式应该是“读写”文件。“读写”文件的打开模式有两大类:读为主的读写类模式和写为主的读写类模式。在对文件数据读写时,必须确认读写位置指针的性质是“读位置指针”还是“写位置指针”。下面通过两个示例展示文件“读写”模式的使用方法。......
2023-11-20
二进制文件的特点是存储效率较高,但不便于程序中直观地进行数据处理。非缓冲文件系统指的是不由系统开辟文件缓冲区,而是由程序员为用到的每个文件设置数据缓冲区,并自行对文件缓冲区进行管理。C语言中,用一个系统已经构造好的文件类型变量来保存这些信息。......
2023-11-20
相关推荐