详解fprintf fscanf与sprintf sscanf

目录

前言

一、什么是stream流?

二、fprintf与fscanf

1.fprintf

2.fscanf

三、sprintf 与sscanf

1)sprintf

2)sscanf

四、比较


前言

在文件操作时,接触文件操作相关函数是不可避免。由于其内容较多且杂,本文不会对所有内容一一讲解。在文件操作中,有一组函数对大多数新手难以上手,本文将对fprintf sprintf 与fscanf sscanf进行逐一比较,由浅入深掌握使用方法.

一、什么是stream流?

假设在溪流的一岸,有人想要横渡溪流,那么就必须要有工具。在机器中,溪流的俩岸,对应内存和外部设备,“流”就是沟通溪流俩岸工具的船。

这里补充一下,外部设备包括:硬盘、屏幕、键盘、鼠标、光盘.......

但是不同的外设有不同的读写方式,如果一个程序员要对键盘、光盘读写,那么就要掌握每种读写方式,为了提高效率,程序引进“流”

“流”就是对外部设备使用的抽象,程序可以通过流写入外部设备,也可以从外部设备读入程序

总结:“流”就是内存与外部设备的交互

 一个C程序打开,就会打开三个默认的“流”

  1. stdin —— 标准输入流(键盘)
  2. stdout —— 标准输出流(屏幕)
  3. 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是把格式化的数据写到输出流中

 感谢大家阅读,我是凡凡!

猜你喜欢

转载自blog.csdn.net/m0_73299809/article/details/129873606