浅谈scanf、fscanf、sscanf的使用和区别

下面浅谈了sscanf和fscanf的用法和自己的一些理解

在这里插入图片描述

函数的参数对比
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(三个函数的头文件都是stdio.h)
在这里插入图片描述

讲三个函数前 先得明白流大概是个什么东西

我们写的程序经常要和硬件交流 常见的有 光盘 键盘 屏幕 软盘等
硬件不同 读写方式自然不同 沟通的方式也不同
那我们岂不是要学很多种"语言"
在这里插入图片描述

为了解决这种情况便出现了流 有点像水流 也有点像介质
在这里插入图片描述

于是我们便不用学那么多"语言"了 ,只用注意流这一种"语言"就行了!在这里插入图片描述

(个人理解:可以理解成数据转为了流 各种硬件有自己理解流的方式,而我们使用时只要注意流 不用关心硬件怎么理解流)

流也分文件流、标准输入流、标准输出流等
流是个高度抽象的概念,使用的多了自然就有自己的理解

在这里插入图片描述

fscanf的使用

在这里插入图片描述

fscanf与scanf对比只多了一个FILE*的指针

fscanf(stdin,...)等同于scanf(...)

例:

stdin是标准输入流 也就是键盘 本质也是一个文件流
在这里插入图片描述

fscanf的作用:从文件中读入数据 赋值给变量

例:
在这里插入图片描述
右边是文件里的信息…
运行结果:
在这里插入图片描述

注:避免从文件中读入中文 会出现乱码的情况
中文的编码不是单纯的ASCII码 中文有自己的编码标准
如果想要成功读取 就要改一下编码规则
这里以txt为扩展名的文件为例
把文本文件的UTF-8改为ANSI即可成功读取(这是大佬解决的,牛哇牛哇在这里插入图片描述

在这里插入图片描述
前后两次的对比

在这里插入图片描述
在这里插入图片描述

上面的例子中给结构体成员赋值了 同理也可以给各种类型的变量赋值
官方一点:将文件中的数据格式化后输入
在这里插入图片描述

sscanf的使用

在这里插入图片描述
sscanf和scanf对比只多了一个buffer指针

官方点:从一个字符串中读入格式化的数据
简单点:从字符串中读入要的数据 (这也是为什么参数必须时字符指针的一个原因)

默认读入是从stdin中读入,在这读入来源改成了字符串而已.

举个栗子:

问:ccl is a good man 提取出里面的每个单词(有很多办法实现切割,这里用sscanf试试)
别问ccl是谁
在这里插入图片描述

在这里插入图片描述

换个角度看:把a作为读入的来源 把数据读入了tmp五个数组里(初始化了五个tmp字符数组)

再举个例子
在这里插入图片描述

这里把字符串里的字符转为了数字,或者说初始化了三个tmp
sscanf常用操作传送门

总结

sscanf和fscanf不过是比scanf多了一个参数罢了

fscanf多了一个文件流 (stdin和stdout本质也是文件流)
sscanf多了一个字符指针

可以把这个不同的参数看作"源"

从源里面拿数据,再转换为其他类型的数据(格式化成别的类型的数据)前提是数据类型合法

sscanf可以实现切割字符串等常见的字符串操作
fscanf可以让我们从文件中拿到想要的数据

言而总之,sscanf和fscanf让我们得到数据的方法多样化 毕竟原来你只能从键盘(stdin)输入数据
在这里插入图片描述


如果有启发的话,留个赞再走吧,这对我帮助很大!

不点?
在这里插入图片描述

  • 24
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢乙醇的四氯化碳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值