关于scanf的笔记两条(1.gets 2.%*c赋值忽略符)

1.scanf和gets都可以进行输入,前者为关键字后者为函数:gets(arr,sizeof(arr)/sizeof(arr[0])-1);

 首先,scanf不能自主吸收/n或者空格

其次,scanf和getchar在输入完后不能自动吸收/n,会将/n放在缓存区,这时就需要再使用一个getchar来吸收/n。但是gets(在vs2022等编译器中为gets_s)函数能自动吸收末尾的/n,更加方便(不过就别用getchar来吸收了,不然会少一个字符。)

2.只要把*加在任何占位符后面,该占位符不会返回值。

比如%*c 

这样就可以使用空格或者逗号(英语)等隔开想输入的两个数字。

若使用中文:

大家还可以自行尝试,输入2,,5也会发生这样的现象。(此处的逗号是英文)

首先,明白下%*c是什么作用,他是忽略掉一个字符。

因为scanf是匹配读取,,跟我们要的%d不匹配,直接没有读取,scanf就返回了个随机值。

循环打印也是一样,iutput和y一样的,都没有scanf读取成功,为什么呢?

因为有个scanf读取不了的东西占在缓存区,所以就会没法读入新的intput,intput一直是1.就会无限打印。

而中文汉字与逗号都是占两个字符,所以输入中文逗号的时候,scanf因为识别不了后半个中文逗号,及直接会返回一个随机值给y,因此出现bug。

(下图会测试代码)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值