目录
前言
在文件操作时,接触文件操作相关函数是不可避免。由于其内容较多且杂,本文不会对所有内容一一讲解。在文件操作中,有一组函数对大多数新手难以上手,本文将对fprintf sprintf 与fscanf sscanf进行逐一比较,由浅入深掌握使用方法.
一、什么是stream流?
假设在溪流的一岸,有人想要横渡溪流,那么就必须要有工具。在机器中,溪流的俩岸,对应内存和外部设备,“流”就是沟通溪流俩岸工具的船。
这里补充一下,外部设备包括:硬盘、屏幕、键盘、鼠标、光盘.......
但是不同的外设有不同的读写方式,如果一个程序员要对键盘、光盘读写,那么就要掌握每种读写方式,为了提高效率,程序引进“流”。
“流”就是对外部设备使用的抽象,程序可以通过流写入外部设备,也可以从外部设备读入程序
总结:“流”就是内存与外部设备的交互
一个C程序打开,就会打开三个默认的“流”
- stdin —— 标准输入流(键盘)
- stdout —— 标准输出流(屏幕)
- stderr —— 标准错误流(屏幕)
在进行文件操作时,进行会用到文件指针,文件指针也是一个流——文件流
二、fprintf与fscanf
1.fprintf
对比printf函数
二者函数除了第一个函数不同,fprintf函数第一参数为一个流。
fprintf作用:将格式化数据,输出到一个流中
printf作用: 将格式化数据,输出到标准输出流(屏幕)中
在使用fprintf时,可以先以printf的格式传参,最后再传入某个流
举例:
1)输出到标准输出流
针对标准输出流,fprintf与printf除了传参差异,效果相同。
2)输出到文件流
本段代码就是在该程序文件路径底下,打开一个strdata.txt文件,写入结构体对象
将内容输出到文件流,增加打开文件和关闭文件的步骤。
2.fscanf
有了fprintf的学习,对于fscanf的学习将会得心应手
fscanf与scanf的差别在于第一个参数
scanf:作用于标准输入流(键盘)
fscanf:作用于所有流中
举例:
1)标准输入流
此时 fscanf的效果与scanf一致。再次说明,scanf是从标准输入流中得数据
2)文件输入流
由于fprintf与fsanf的使用较简单,就不做过多的解释
在不熟悉时,只要先以printf、scanf的格式传参,最后再指定某个流即可
三、sprintf 与sscanf
1)sprintf
函数作用是将格式化数据转换为字符串
函数与printf类型,第一参数为字符地址
举例:
创建一个结构体变量,通过sprintf格式化输出,将自定义类型转换为字符串
通过调试,在没有进入sprintf函数时,string数组内容为\0
进入函数后,进行对应格式转化成字符串
2)sscanf
函数作用时从字符串中,读出格式化数据。
举例:
字符串数据12345
格式换转换为整形
最后以整形打印出数据
在处理字符串相关的题目时,往往会将字符串转换为数字、或者将数组转换为字符串
sscanf和sprintf就有这样的功能
四、比较
printf——是针对标准输出流(stdout)的格式化输出函数
scanf——是针对标准输入流 (stdin )的格式化输入函数
fpintf—— 是针对所有流的格式化输出函数
fscanf——是针对所有流的格式化输入函数
sprintf——将格式化数据转换为字符串
sscanf——将字符串数据转化为格式化数据
五、总结
本文首先介绍了流的作用,“流”就是方便内存和外部设备交换数据的一个通道,我们平常说的文件就是文件流、键盘就是输入流.......
之后学习了比printf 和scanf作用范围更广的fprintf 和fscanf函数
最后举例字符串和格式化类型相互转化的函数
最后有一道习题
(单选)下列说话不正确的是( )
A.scanf和printf是针对标准输入、输出流的格式化输入、输出语句
B.fscanf和fprintf是针对所有输入、输出流的格式化输入、输出语句
C.sscanf是从字符串中读取格式化的数据
D.sprintf是把格式化的数据写到输出流中
感谢大家阅读,我是凡凡!