C语言scanf读取回车和空格等相关问题

在c语言中,初学者经常会遇见 scanf 读取空白字符(回车,空格)等问题,解决的办法就是在 scanf 读取前用 getchar( ) 函数把缓存区的空白字符读取掉,当然,你也可以用 scanf 读取

下面,我们来探讨一下 scanf 函数的读取原理:

大致来说,原理是这样的:用户在键盘上输入字符,这些字符会被存入一个叫缓存区的地方,然后 scanf 根据占位符去挨个读取缓存区的字符。而每当我们输入完成后,总会按下回车键,而这个回车键也是一个空白字符(简单点说,回车是个字符),然后 scanf 一不小心就把回车给读取了。解决的办法就是用一个函数把这个回车给读取掉,比如 getchar 和 scanf。

但是秉着刨根问底的精神,我觉得有必要探讨一下什么时候 scanf 会不听话的读取回车,先来看看以下代码:

int  n = 0, m = 0;
char x = 0;
scanf("%d" , &n);
scanf("%d", &m);
scanf("%c" , &x);

可以看到,只有 3 后面的回车被读取了,而两个整型的读取没有任何影响,所以,这是因为占位符是%c ,还是 x 的类型为char?

接着看把 m 的类型换成 char:

int  n = 0;
char m = 0;
char x = 0;
scanf("%d" , &n);
scanf("%d", &m);
scanf("%c" , &x);

可以很明显的看到,还是只有3 后面的回车被读取了,而 m 存放了‘x3’,盲猜是个字符

下来把 m 的占位符换成%c :

    int  n = 0;
	int m = 0;
	char x = 0;
	scanf("%d" , &n);
	scanf("%c", &m);
	scanf("%c" , &x);

可以看到,回车被读取了,并且被存放成整型10,由以上推断,scanf 读取空白字符的情况取决于 占位符%c ,与字符类型无关。

那么%s 能行吗?

试试:

int  n = 0;
int m = 0;
char x = 0;
scanf("%d" , &n);
scanf("%s", &m);
scanf("%c" , &x);

可一看到 %s 好像对回车不感兴趣。。。。

总结: scanf 读取空白字符的情况只与 占位符 %c 有关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值