我在c prime plus 中文版习题解答书中看到如下这个一个代码
![a6686acff7ce34f69fc73e4c2a8166f7.png](https://i-blog.csdnimg.cn/blog_migrate/58d4c7edd726d9b69f87e8b9282581c0.png)
运行结果如下
![baa2313d034bb2806d9fa850f84c9292.png](https://i-blog.csdnimg.cn/blog_migrate/e1abedcfeaed245142043f266ded3d32.png)
书中的解释是:c 语言在使用scanf()函数读取用户输入的字符串时,如果遇到第一个空白(空格,空白,制表符,换行符 ),就完成读取工作,后续数据不再写入当前变量,而只保存在缓冲区中, 如果有下一个scanf()将直接将刚才缓冲区的内容赋给这个变量, 所以是weight是0.00000;
但是如果把double i 改成int i;
则程序则不存在缓冲区问题;那么为什么double 改成int 就有这么大的区别呢?
下面是将double 改成int 后的代码和代码运行情况;
![8e4b34a30830648927a3e1e50d564df8.png](https://i-blog.csdnimg.cn/blog_migrate/d7d6d121477836ac1e72e014de1c0417.jpeg)
![c488ad328ee652f0479ca5e5ed95ef14.png](https://i-blog.csdnimg.cn/blog_migrate/e177fcc3bdc393b2febe1b9947473214.png)
可以看出这里weight是70; 那么为什么会这样呢?
求大佬指教 !!!