VS中scanf连续读取和清空缓冲区

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int i;
    while (scanf("%d", &i)!=EOF)
        printf("i=%d\n", i);
    //输入ctrl+Z回车 三次 即可退出循环。
    return 0;
}
//scanf返回值是成功读取的个数

1、scanf中只接受%d类型的数据,也就是整型;

2、连续读取的时候,如果输入了a,scanf因为只接受整型,所以不接受字符型,这时scanf返回0;EOF是等于-1,零不等于负一,所以循环会一直进行,打印i的值;

3、处理办法:vs老版本(2012)用fflush(stdin)来清空缓冲区,即scanf里面输入的字符型数据,

vs更新的版本利用rewind(stdio)来解决。

具体代码如下

while (rewind(stdin),scanf("%d", &i)!=EOF)

//只用在while中加入rewind(stdin),老版本将其替换为fflush(stdin);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值