scanf 和 printf 中 格式化标识符的小细节
数据类型必须和格式化标识符一一对应,不管是输入还是输出,否则会造成不可逆的结果,数据丢失(输出的是一个毫不相关的垃圾值)
为什么会丢失?
不管是读取还是输入,每一种标识符获取到的数据,它被存储的区域,都是不一样的,一种数据类型,会专门存放在一个区域
例如下面:
%f 和%d 存放数据的区域是相互独立的,每个输入进来的数据都有相应关联的变量和对应的地址,若是标识符类型和变量类型不同,例如第八行,使用%d 输出a的值的时候,printf 函数会去存储%d 的数据的区域找数据,而%d 没有叫做a的整形变量,所以输出的就是一个垃圾值。
而下图中,以 %f 读取数据并赋值一个int 类型的变量,%f 是用于读取浮点数类型, 而 b 是int 类型,两者冲突,所以并不会进行读取操作,相当于这个数据没有输入,%d 和 %f 的区域都没有刚刚键盘输入的数据,所以,不管是在%d 还是在 %f 的区域都没有对应的数据,所以,输出的是一个垃圾值