关于scanf()缓冲区

      C语言中的输入函数(包括scanf,getchar等)在接收键盘输入时,把输入放在了“输入缓冲区”。当scanf()、getchar()做输入操作时,以回车符作为结束标志,并把回车符' /n '包含在输入字符串中储存在缓冲区,再从输入缓冲区中取走输入字符串赋值给变量,但却没有取走回车符'/n'。再当我们二次调用scanf()时,scanf()函数被跳过,”得不到执行“。因为这时输入缓冲区依然保留了前次输入的时候留下的回车符'/n',故直接跳过。注:当输入为字符时,缓冲区中遗留下了'/n',当输入为int 时,则不发生该情况。

解决办法:

 

      C语言中有一个清除缓冲区的函数int fflush(FILE*),即  fflush(stdin) 该函数在<stdio.h>中定义。具体到本程序,需要清除的缓冲区是键盘缓冲区stdin。需要在scanf调用后面彻底清空缓冲区。

 

例:

 

 

#include   <windows.h>    

int   main(   )   

{

    char a[100]="";

    char b = 'q';

    scanf("%s", a);   //需要在输入后手动清空缓冲区,加入fflush(stdin) 即可避免。

    b = getchar();

    printf("a = %s , b= %c/n",a,b);

 

    return   0;   

}  

 

例:

 

 

#include   <windows.h>    

int   main(   )   

{

    char i;

 

    do

    { 

       scanf("%c",&i);

       printf("i= %c ,/n",i);

    }while(1);

 

     return   0;   

 

我们定义了一个字符变量i,当我们输入abcd 时,则每次scanf都会从输入缓冲区中读出一个字符给i,则输出结果为:

 

 

abcd

i= a ,

i= b ,

i= c ,

i= d ,

i=

 ,

----- 此处接着输入,上面有两个'/n'。

得出,scanf()做输入操作时,首先会检查输入缓冲区是否为空,不为空,则从缓冲区中读取数据。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值