输入输出缓存刷新

一,问题场景

    使用getchar获取用户输入,根据用户输入判断是否退出循环,输入字符之后,发现连续出现两次提示输入

 int main( int argc, char **argv )
    {
	char condition;
	do
	{		
            printf("input y or Y to quit\n");
	    condition = getchar();		
	}while( condition != 'y' || condition != 'Y' );
	return 0;
    }

二,原因分析

   在标准输入stdin中,输入q\n之后,两个字符会进入输入缓冲区,通过getchar从输入缓冲区获取一个字符q,由于缓冲区还存在\n字符,所以getchar直接返回。\n不满足循环退出。所以再次输入提示信息。

三,解决办法

    int fflush(FILE *stream);//fflush会强制将缓冲区中的数据写会stream描述符中

    1)fflush(stdin):

        在getchar之后调用fflush(stdin),可以将缓冲区中的数据清空。

    2)fflush(stdout)

        会强制刷新输出缓冲区中的数据到标准输出

四,输入输出缓存缓冲(参考:https://blog.csdn.net/Infect_your_breath/article/details/75944176

             缓存类型:
             全缓存:当填满I/O缓存后才进行实际I/O操作(或者执行fflush、flose、exit、return),4K大小
             行缓存:当填满I/O缓存后才进行实际I/O操作或者遇到‘\n’(或者执行fflush、floce、exit、return),1K大小
             无缓存:标准错误输出strerr

            printf(),是先将格式化好的信息先输到缓冲区上,因为输入输出的缓存为行缓存,所以当填满I/O缓存后,才进行实             际 I/O操作或者遇到换行符‘\n’(或者执行fflush、floce、exit、return),缓存大小为1K。

            scanf()这个函数在缓存里面读数据时,会先将缓存区刷新,还有getc()、gets()、fgetc()、fgets()这几个读取数据时,也会会先将缓存区刷新,然后再读取数据。。


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值