为什么输入小数时,程序会疯狂重复爆屏?

img

img

为什么输入小数后会重复并爆屏?🥲🥲🥲

分析:
输入小数时,scanf处理字符串如下
12.2
scanf("%d",&x)读取一个整数,并从缓冲区中去除了读取的那一部分,于是缓冲区现在是
.2
scanf("%d",&y)读取整数,但是缓冲区中第一个字符为'.',不符合条件(scanf只会跳过空白),于是立马返回0(自己试试接受一下返回值),之后都一样
(循环)

建议:
1.scanf读取是用返回值来判断输入是否正常并反馈给用户让他重新输入
2.用getchar()与while来"吃掉"这一行来杜绝缓冲区出错(第一个方法也需要这个,否则就是错误信息循环)(这个会吧?)

当你输入一个小数,如12.34时,程序首先把12当做整数读取,然后把小数点放回待输入的序列,再次循环到输入语句时得到了一个小数点,发生错误,把小数点放回待输入的序列。这样下去,程序一直不会得到正确输入。建议在输入时加上判断输入是否成功的if语句

考虑cin>>x;