“21天好习惯”第一期-11

先看此程序第一次测试的运行结果:

 这是此程序第二次测试运行结果:

 由此说明了什么呢?在第一次测试时,我们输入的是1.2,但scanf函数只读了整数,后面的圆点被视为非数字字符导致输入结束。由于这个非数字字符仍然保存在输入缓冲区中,因此第二个scanf函数调用语句从输入缓冲区中读到的数据仍然是这个非数字字符,所以没等用户输入数据,就打印出了变量b中的随机值,和没有执行第9行语句的效果是一样的。在第二次测试时,由于用户输入的是非数字字符‘q’,而且它一直保存在输入缓冲区中,因此两个scanf函数都不能够正确读取数据,相当于变量a,b都没有被赋值,所以打印出来的结果是不确定的,为随机值。

那我们该如何解决这个问题呢?我们可以考虑用检验函数scanf调用返回值的方法,如图

 

这样能避免一些问题,但当后面输入小数时后面小数点的值还是会视作无效的。因为函数scanf不做参数类型匹配检查。

学习笔记:第十五行的作用是为了确保留在缓冲区的非数字字符不会影响其后的数据输入,所以调用fflush()来清除输入缓冲区中的内容。 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值