关于scanf内部运行方式的猜测

关于scanf内部运行方式的猜测

大家都会用scanf,利用它输入一些数据都是没问题的,但是不知道你们在运用的时候是否出现过一些比较烦的问题?大家脑子中是否有缓存区这个概念?

首先,我先来说下scanf的运行机制。
第一个条件就是需要程序中要有scanf这条语句。第二个条件是scanf里面要求用户输入数据。假如程序中有这么一条语句 scanf(“”); 。那这条语句是起不到让用户输入内容的效果的。需要有 %d 或者 %c 等。然后程序就会等待用户输入一些东西,这个时候,你输入多少内容都是可以的,只要不按下回车键,你就可以一直输入。你在屏幕上面输入的内容都到哪去了呢?这个时候就要有缓存区这个概念了。顾名思义,它就是起到一个临时缓存的作用而已,将你在屏幕上输入的内容暂时储存到这个地方,当你结束输入后(当你按下回车键时,他就认为你想结束输入了)。系统就会自动按照程序中scanf里面%d%c%f等这些数据的排列顺序,依次放到对应变量的储存空间里,如果输入不足,则仍然需要继续输入,如果输入过多,多余的内容仍然会保存在缓存区中。也就是说,如果有下面一条语句。

scanf(“%d%f%c”, &a, &b, &c);
你输入的内容是 123 3.5 d

然后,按照我们一贯的理解 a=123,b=3.5,c = ‘d’

但是实际却并不是这样的,实际的c中存放的是空格。因为空格包括回车都是被算作字符的,都可以用char型的字符变量来接收。

最后,我再补充几条scanf的使用小规则吧,编译不能检查出来的。

1、普通变量前缺少了 &。
2、在进行输入时,一定要严格按照程序中的规定输入,%d%f就输入数字,%c就输入字符,%s就输入字符串。其他用于间隔的字符一定要严格按照顺序输入,用逗号(,)间隔,就输入逗号,用空格( )间隔,就输入空格。没有间隔的情况见下一条。
3、如果在scanf的引号中的%格式符都没有规定间隔,那么数字与数字之间的默认间隔就是空格。因为需要区分两个数字。数字与字符的话,在数字的前一个字符或后一个字符即会被读取。
4、在输入字符串时,只能以回车键结束。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值