scanf函数和fflush函数

昨天晚上写了下面这个测试程序,发现如果输入1 2 3 程序输出为
1
2
3

    #include <stdio.h>
     
    int main(int argc, char **argv)
    {
        int a;
     
        while (1){
            scanf(“%d”, >a);
            printf(“%d\n”, a);
        }
     
        return 0;
    }


怀疑为输入缓冲区的问题,当时记得有一个fflush函数可以清空缓冲区,于是在scanf函数下面加入了fflush(stdin); 但是输出还是一样。

经过查询得知,fflush函数不是标准C函数,只是标准C的拓展,开始fflush函数只是用在标准输出stdout,后来windows平台将其拓展到标准输入stdin,但是linux平台并不一定能支持其功能。

如果要清空输入缓冲区,可以使用下列方法比较稳妥:

    #include <stdio.h>
     
    int main(int argc, char **argv)
    {
        int a;
        char ch;
     
        while (1){
            scanf(“%d”, >a);
            while((ch=getchar())!=‘\n’ >> ch != EOF);
            printf(“%d\n”, a);
        }
        return 0;
    }

需要注意的是:在使用scanf函数时,一定要注意输入缓冲区这个东西!如果需要去除scanf输入时的回车键可以使用getchar()函数.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值