了解scanf缓冲区

scanf缓冲区

在学习scanf之前,先来了解以下“缓冲区”这个概念。

我们从键盘输入的都是字符,scanf中的“%d”会将从键盘中输入的字符转换为整型,其它类型亦如此。当我们从键盘输入时,数据会先存入缓冲区。但是!当我们输入一个整型数字时,会用回车来结束,那么回车这个按键也会留在缓冲区,对应的时 ‘\n’ 。了解这一点,然后我们来看一个栗子。

#include <stdio.h>
#include <stdlib.h>
int main() {
	int m;
	char c;
	scanf("%d", &m);
	printf("m=%d\n", m);
	scanf("%c", &c);//读取的是\n,所以不会阻塞
	printf("c=%c\n", c);
	system("pause");
}

在这里插入图片描述

当我们输入10的时候,会按一个回车,此时缓冲区就会有一个 ‘\n’,然后 scanf("%c", &c); 这条语句就会读取缓冲区 ‘\n’,将换行输出,所以最终结果有两个换行。 那么如何先输入一个整型,然后再输入一个字符型呢?只需要对缓冲区进行刷新就可以了!!!

printf("m=%d\n", m);
fflush(stdin);//清空缓存区
scanf("%c\n", &c);

下面来看一个循环输入的栗子。自行研究。

#include <stdio.h>
#include <stdlib.h>
int main() {
    int m;
	char c;
	while(fflush(stdin),(scanf("%d",&m)!=EOF)) //EOF==-1
    {
        printf("%d\n",m);
    }
	system("pause");
}

当没有fflush(stdin)时,第一次有输入时会判断为1 !=EOF,进入循环,当输入字符型时,判断为0,同样也不等于-1,所以会一直循环。因而前面加上了fflush(stdin),防止输错。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值