我在c prime plus 中文版习题解答书中看到如下这个一个代码

运行结果如下

书中的解释是:c 语言在使用scanf()函数读取用户输入的字符串时,如果遇到第一个空白(空格,空白,制表符,换行符 ),就完成读取工作,后续数据不再写入当前变量,而只保存在缓冲区中, 如果有下一个scanf()将直接将刚才缓冲区的内容赋给这个变量, 所以是weight是0.00000;
但是如果把double i 改成int i;
则程序则不存在缓冲区问题;那么为什么double 改成int 就有这么大的区别呢?
下面是将double 改成int 后的代码和代码运行情况;


可以看出这里weight是70; 那么为什么会这样呢?
求大佬指教 !!!