scanf()如何真正起作用?

Jae*_*bum 4 c scanf stdio

在Windows上,

char c;
int i;

scanf("%d", &i);
scanf("%c", &c);
Run Code Online (Sandbox Code Playgroud)

计算机跳过从控制台检索字符,因为'\n'保留在缓冲区上.但是,我发现下面的代码效果很好.

char str[10];
int i;

scanf("%d", &i);
scanf("%s", str);
Run Code Online (Sandbox Code Playgroud)

就像上面的情况一样,'\n'仍然保留在缓冲区上但为什么scanf这次成功从控制台获取字符串?

ter*_*nus 6

从gcc手册页(我没有Windows方便):

%c:始终匹配固定数量的字符.最大字段宽度表示要读取的字符数; 如果未指定最大值,则默认值为1.它也不会跳过初始空白字符.

%s:匹配一串非空白字符.它跳过并丢弃初始空格,但在读完之后遇到更多空格时会停止. [本条款应解释您所看到的行为.]