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。
(下图会测试代码)