%c和%s用scanf输入时缓存区如何变化?

毕设货栈 其他问答 1
#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;
}

这样一段代码,我以为输入一个字符后回车,再输入字符串的结果是:那个回车留在缓冲区里,之后赋给了字符串的第一个字符。但是结果并不是这样:

结果并没有受到影响,此处开始我就不明白输入字符之后的缓存区里是怎么一回事了? 希望有人能给出解释,谢谢!

回复

共1条回复 我来回复
  • 源码码头
    这个人很懒,什么都没有留下~
    评论

    scanf在用%s接收字符串的时候,在遇到空格和回车符的时候认为输入结束,在用%s接收字符串时,如果第一个字符是\n,编译器会自动把它忽略,所以第一次scanf("%c",&ch)输入的回车符被自动忽略了。但是在%c接收字符的时候,默认接收所有字符。

    0条评论

发表回复

登录后才能评论