首先看现象
#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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。