关于scanf输入字符串回车的问题

首先看现象

#include<stdio.h>
#include<stdlib.h>
#include <string.h>

int main(void)      //1094
{
	setvbuf(stdout,NULL,_IONBF,0);   //解决 scanf不能debug的问题
	char a[1001];
	char i=0,j=0;
	scanf("%c",&i);
	scanf("%c",&j);

	printf("%c\n",i);
	printf("%c\n",j);
	printf("----------");


    return 0;
}

运行

a
ba


----------

scanf输入abc[回车]后,遇到回车结束,但是回车还留在输入流中。下一个scanf在输入前碰到回车,会自动把回车抛弃,然后输入efg,再碰到回车后结束。

所以,你加了getchar时,它会吃一个回车,如果不加,就会自动删除这个回车,所以结果是一样的。


 

就是说,空格,回车,跳格等结束符在输入前碰到的话,会自动抛弃,输入后碰到的话,就会认为结束

以上是针对除了%c而言的

对于%c,遇到这些字符都会读取的。

若scanf(“%c”,&i);
scanf(“%c”,&j);
输入a[回车]b的话
就会使i=a,j=回车
但如果中间加上getchar
就是i=a,j=b

所以一般用getchar来吃回车时,是用在%c后面

代码改为

#include<stdio.h>
#include<stdlib.h>
#include <string.h>

int main(void)      //1094
{
	setvbuf(stdout,NULL,_IONBF,0);   //解决 scanf不能debug的问题
	char a[1001];
	char i=0,j=0;
	scanf("%c",&i);
	getchar();
	scanf("%c",&j);

	printf("%c\n",i);
	printf("%c\n",j);
	printf("----------");


    return 0;
}

运行结果

a
b
a
b
----------

(我是这么理解的,因为最近做题也是碰到这些问题,所以自己查了资料问了老师。望采纳,若有不对的地方,欢迎指出 (ง •̀灬•́)ง)

作者:Awesome
链接:https://www.zhihu.com/question/29130819/answer/248134253
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值