#include<stdio.h>
int main()
{
char ch;
char a[20] = {0};
scanf("%c", &ch);
scanf("%s", a);
printf("%c\n", ch);
printf("%s",a);
return 0;
}
这样一段代码,我以为输入一个字符后回车,再输入字符串的结果是:那个回车留在缓冲区里,之后赋给了字符串的第一个字符。但是结果并不是这样:
结果并没有受到影响,此处开始我就不明白输入字符之后的缓存区里是怎么一回事了?
希望有人能给出解释,谢谢!
scanf在用%s接收字符串的时候,在遇到空格和回车符的时候认为输入结束,在用%s接收字符串时,如果第一个字符是\n,编译器会自动把它忽略,所以第一次scanf("%c",&ch)输入的回车符被自动忽略了。但是在%c接收字符的时候,默认接收所有字符。
scanf("%s"这种形式是不接受换行符和空格的。