C语言fgetc()和fputc()函数的用法(非常详细,附带实例)
在 C 语言程序中,当以字符形式读写文件时,需要用到 fgetc() 和 fputc() 这两个函数,它们的作用是对文本文件读取和写入一个字符。
fgetc() 函数的语法如下:
fputc() 函数的语法如下:
fgetc() 和 fputc() 函数的返回值都是 int 型:
【实例 1】创建一个文本文件,从键盘输入一些字符,逐个把它们写入文件中,到输入字符“#”为止。代码如下:
打开 c.dat 文件,文件的内容为:
【实例 2】将上例的 c.dat 文件中的内容读取出来显示在屏幕中,并且在该文件后面添加“and computer!”的内容。代码如下:
feof(fp) 是用来判断 fp 是否指向文件的尾部标志的,即 End of File,当文件读到尾部时,feof(fp) 的返回值为 1,此时结束 while 循环的读操作。
C语言中的文件分为两种:ASCII 文件(文本文件)和二进制文件。
可以用任何文字处理程序阅读的简单文本文件、图形文件及文字处理程序等计算机程序都属于二进制文件,这些文件含有特殊的格式及计算机代码。
文本文件的数据以字符的形式存放在磁盘中,所以文本文件的内容是可以直接读懂的;而在读二进制文件时会原封不动地读取文件的全部内容,写二进制文件也是将文件缓冲区的内容全部写入,不进行转换。
二进制文件不能直接读懂,这是文本文件和二进制文件最直观的区别。
C语言中用“\n”便可实现换行,而 Windows 操作系统需要用“\r”和“\n”才能实现换行:
打开文本文件的方式不带“b”(r、w、a、r+、w+、a+),打开二进制文件的方式是带“b”的(rb、wb、ab、rb+、wb+、ab+),“b”的作用就是在读写文件时进行换行符的转换。
二进制文件要用二进制的方式打开和读写,文本文件则要用文本的方式打开和读写,规范使用,避免出现错误。
fgetc() 函数的语法如下:
fgetc(fp) //fp为文件指针
fputc() 函数的语法如下:
fputc(ch,fp) //ch为写入文件的字符,fp为文件指针
fgetc() 和 fputc() 函数的返回值都是 int 型:
- fgetc() 函数读取到文件末尾或读取失败时会返回 EOF(End of File),EOF 为负数,EOF 是文件末尾标志,程序读到该标志时结束读取操作;
- 同样,fputc() 函数写入失败时会返回 EOF,结束向文件进行写入操作。
【实例 1】创建一个文本文件,从键盘输入一些字符,逐个把它们写入文件中,到输入字符“#”为止。代码如下:
#include <stdio.h> #include<stdlib.h> #define FILESTR "E:\c.dat" //定义文件路径 int main() { FILE *fp; char ch; //在E盘中创建c.dat文件 if((fp=fopen(FILESTR,"w"))==NULL) { printf("error: cannot open file!\n"); exit(0); } printf("输入要保存的字符,以#结束: \n"); while((ch=getchar())!='#') //程序读到'#',结束while循环,所以不会将'#'写入文件中 { putchar(ch); fputc(ch,fp); } //每次从键盘读取一个字符写入文件并且显示在屏幕中 printf("\n"); printf("创建完成!\n"); return 0; }编译运行,结果如下:
输入要保存的字符,以#结束:
I love c yuyan#
I love c yuyan
创建完成!
打开 c.dat 文件,文件的内容为:
I love c yuyan
【实例 2】将上例的 c.dat 文件中的内容读取出来显示在屏幕中,并且在该文件后面添加“and computer!”的内容。代码如下:
#include <stdio.h> #include <stdlib.h> #define FILESTR "E:\c.dat" //定义文件路径 int main() { FILE *fp; char ch; printf("读取c.dat文件中的内容: \n"); if((fp=fopen(FILESTR,"a+"))==NULL) { printf("error: cannot open file!\n"); exit(0); } ch=fgetc(fp); while(!feof(fp)) //!feof(fp)为可以换成ch!=EOF { putchar(ch); ch=fgetc(fp); } //每次读取一个字符,直到读取完毕 printf("\n对c.dat文件添加内容,直到输入#: \n"); while((ch=getchar())!='#') { putchar(ch); fputc(ch,fp); } printf("\n添加完成\n"); fclose(fp); return 0; }编译运行,结果如下:
读取c.dat文件中的内容:
I love c yuyan
对c.dat文件添加内容,直到输入#:
and computer!#
and computer!
添加完成
feof(fp) 是用来判断 fp 是否指向文件的尾部标志的,即 End of File,当文件读到尾部时,feof(fp) 的返回值为 1,此时结束 while 循环的读操作。
C语言读写文件的注意事项
在 C 语言中,打开文件后就可以对其进行读写操作,打开文件实际上是建立一个信息缓冲区,数据实际上并没有直接写入文件,而是被存储在缓冲区(一般是内存中),执行 fcolse() 函数后才将数据送入文件中,然后关闭文件。C语言中的文件分为两种:ASCII 文件(文本文件)和二进制文件。
可以用任何文字处理程序阅读的简单文本文件、图形文件及文字处理程序等计算机程序都属于二进制文件,这些文件含有特殊的格式及计算机代码。
文本文件的数据以字符的形式存放在磁盘中,所以文本文件的内容是可以直接读懂的;而在读二进制文件时会原封不动地读取文件的全部内容,写二进制文件也是将文件缓冲区的内容全部写入,不进行转换。
二进制文件不能直接读懂,这是文本文件和二进制文件最直观的区别。
C语言中用“\n”便可实现换行,而 Windows 操作系统需要用“\r”和“\n”才能实现换行:
- 写入文本文件时,系统会将“\n”转换成“\r”和“\n”写入;
- 写入二进制文件时,系统不会将“\n”转换成“\r”和“\n”写入。
打开文本文件的方式不带“b”(r、w、a、r+、w+、a+),打开二进制文件的方式是带“b”的(rb、wb、ab、rb+、wb+、ab+),“b”的作用就是在读写文件时进行换行符的转换。
二进制文件要用二进制的方式打开和读写,文本文件则要用文本的方式打开和读写,规范使用,避免出现错误。