C scanf对于空格的处理
最近一个同学问我scanf("%d ")对于字符串的处理(注意%d后面有一个空格)。
int n;
for (int i = 0; i < 5; ++i)
{
scanf("%d ", &n);
}
这样的一个循环,希望是输入5个空格隔开的数字。(这并不正确,正确写法就是直接scanf("%d", &n))运行这个循环的时候,输入5个空格分隔的数字过后,程序还会接着等待输入,回车也没用,必须再输入一个字符才会停止。
1 2 3 4 5↵
1↵
这样才会停止。
我最开始看到的时候也是很懵,以为在最后一个数字后面加一个空格就好了,不过并没有任何效果。后来去看了一下scanf的文档,发现如果格式字符串里有空格的话,scanf会匹配连续的所有空白字符,换行和tab都会被匹配。所以如果没有下一个非空白字符,最后一个scanf永远不会匹配成功。scanf文档