C语言fscanf()和fprintf()函数的用法(非常详细,附带实例)
在 C 语言中,借助 fscanf() 和 fprintf() 函数可以实现格式化读写文件,即对文本文件读写按照指定数据类型读取数据。
fscanf() 和 fprintf() 函数的用法跟 scanf() 和 printf() 函数的用法差不多,fscanf() 和 fprintf() 函数的读写对象是文本文件,而 scanf() 和 printf() 函数的读写对象是键盘和屏幕。
fprintf() 函数的语法如下:
fscanf() 函数的语法如下:
对比 scanf() 和 printf() 函数的语法格式不难发现,fscanf() 和 fprintf() 函数只是比 scanf() 和 printf() 函数多了个文件指针。
【实例】创建一个文本文件,用格式化形式将学生的学号、姓名和成绩等信息写入文件中。
在这个程序中,先创建一个学生的结构体,里面包含学生的学号、姓名和成绩等信息。然后创建一个结构体数组,从键盘输入学生的信息保存在结构体数组中。创建一个文件,将数组的信息写入文件中。
具体代码如下:
打开 c.dat 文件,文件中的内容为:
C语言中的文件分为两种:ASCII 文件(文本文件)和二进制文件。
可以用任何文字处理程序阅读的简单文本文件、图形文件及文字处理程序等计算机程序都属于二进制文件,这些文件含有特殊的格式及计算机代码。
文本文件的数据以字符的形式存放在磁盘中,所以文本文件的内容是可以直接读懂的;而在读二进制文件时会原封不动地读取文件的全部内容,写二进制文件也是将文件缓冲区的内容全部写入,不进行转换。
二进制文件不能直接读懂,这是文本文件和二进制文件最直观的区别。
C语言中用“\n”便可实现换行,而 Windows 操作系统需要用“\r”和“\n”才能实现换行:
打开文本文件的方式不带“b”(r、w、a、r+、w+、a+),打开二进制文件的方式是带“b”的(rb、wb、ab、rb+、wb+、ab+),“b”的作用就是在读写文件时进行换行符的转换。
二进制文件要用二进制的方式打开和读写,文本文件则要用文本的方式打开和读写,规范使用,避免出现错误。
fscanf() 和 fprintf() 函数的用法跟 scanf() 和 printf() 函数的用法差不多,fscanf() 和 fprintf() 函数的读写对象是文本文件,而 scanf() 和 printf() 函数的读写对象是键盘和屏幕。
fprintf() 函数的语法如下:
fprintf(文件指针,格式控制字符,参数列表);
fscanf() 函数的语法如下:
fscanf(文件指针,格式控制字符,地址列表);
对比 scanf() 和 printf() 函数的语法格式不难发现,fscanf() 和 fprintf() 函数只是比 scanf() 和 printf() 函数多了个文件指针。
【实例】创建一个文本文件,用格式化形式将学生的学号、姓名和成绩等信息写入文件中。
在这个程序中,先创建一个学生的结构体,里面包含学生的学号、姓名和成绩等信息。然后创建一个结构体数组,从键盘输入学生的信息保存在结构体数组中。创建一个文件,将数组的信息写入文件中。
具体代码如下:
#include <stdio.h> #include <stdlib.h> #define FILESTR "E:\c.dat" //定义文件路径 #define STU_NUM 2 //学生数 struct stu{ char name[10]; //学生名称 int num; //学生学号 float Chinese,math,English; }; int main() { FILE *fp; struct stu stu1[STU_NUM]; int i; printf("请输入学生的信息: \n"); for(i=0;i<STU_NUM;i++) { scanf("%d %s %f %f %f",&stu1[i].num,stu1[i].name,&stu1[i].Chinese, &stu1[i].math,&stu1[i].English); //输入学生的学号、姓名和各科成绩 } if((fp=fopen(FILESTR,"w"))==NULL) { printf("error: cannot open file!\n"); exit(0); } for(i=0;i<STU_NUM;i++) { fprintf(fp,"%d %s %2.1f %2.1f %2.1f",stu1[i].num,stu1[i].name, stu1[i].Chinese,stu1[i].math,stu1[i].English); fprintf(fp,"\n"); } //将数组stu1中的信息写入文件中 fclose(fp); return 0; }运行程序,输出的数据如下:
请输入学生的信息:
1 1 1.0 1.0 3.000
2 3 3.0 3.0 4.0
打开 c.dat 文件,文件中的内容为:
1 1 1.0 1.0 3.0 2 3 3.0 3.0 4.0
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”的作用就是在读写文件时进行换行符的转换。
二进制文件要用二进制的方式打开和读写,文本文件则要用文本的方式打开和读写,规范使用,避免出现错误。