%d后面的空格是用来匹配所有的连续空白字符的(空白字符包括空格 \t \n)直到碰到不是空白的字符。
这个用法主要是为了匹配输入时的空白符,举个例子:
int a;
char c;
scanf("%d",&a);
scanf("%c",&c);
上面这个输入代码里,如果是分两次输入(用空白分割),那么c是没有机会输入的,尤其是从文件读取的时候,会有很多的空白符,c会读取到缓冲区的空白,一般解决这个问题是再用一句gtechar(), ,但如果有很多空白就比较麻烦(文件里这种情况很多),如果在%d后面加个空格,就可以吧剩下所有的空白符给吸收掉:
int a;
char c;
scanf("%d ",&a); //这样可以把空白吸收掉
scanf("%c",&c);
在你这个代码里,输入全是%d格式,那这个空格就没必要了,不如去掉
其实很简单:按scanf接收整数的规则,在%d加一个空格,那么输入时接收一个数字之后就要等待你输入一个空格;但,%d的规则却是跳过空格、回车、制表符来寻找数字——先是让你输入空格,可是一看是空格就等待其后的数字,这就一直停留在scanf函数上了,只有再输入一个数字或其他字符才能往下走。