话不多说,直接上代码
a,b是整型变量,b是浮点型,c是字符型,scanf()函数的内容是,输入的内容从左到右分别是:
输入宽度为2的整数给a,跳过宽度为2的整数,输入有效位数为2的浮点数给b,输入宽度为2的字符数据给c,
其余的整数给d
就是这样的功能。
没有理解的有以下几点:
一、输入的34为何省略了,scanf()中的"%*2d"代表什么?
代表的是直接跳过了宽度为2的的整型数据,即忽略两个0~9的整数
二、为什么按照顺序,变量c中应该是存放了‘78’两个字符的数据,输出却只有‘7’?
因为输出的是单个字符,从左到右输出7一个字符即完成
三、输入12345678900,输出d=900,输入123456789m0,输出d=9
说明在使用scanf()函数给整型变量d输入数据时,读取到非整型数据时会停止输入
另外,还有关于字符数据输入输出
getchar(),putchar()都是输入输出单个字符,其中getchar()是带回显的函数,即输入的字符会显示在屏幕上,相反如果想要在输入单个字符却又不显示在屏幕上时,可以使用无回显的函数getch(),其对应的头文件是#include<conio.h>
===========================================================
没过半小时,突然又遇到了问题
问题在于输出ab时,多了个回车符
关于getchar(),从键盘接收的字符储存在stdin流缓冲区内,与此同时,在执行scanf函数时,最后有个回车确认符停留在缓冲区没有得到处理,所以在接着执行getchar读取ab后,缓冲区的字符是‘回车、a、b’,再次输出c1,c2时,得到一个回车和a
既然问题出现了,那么就需要去解决,既然多了个回车符,,那就去掉它就OK了
一种是通过一个getchar()清除,另一种是通过一个fflush(stdin)清除
OK