关于C语言scanf函数的一个问题

2025-03-06 07:39:02
推荐回答(2个)
回答1:

%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格式,那这个空格就没必要了,不如去掉

回答2:

其实很简单:按scanf接收整数的规则,在%d加一个空格,那么输入时接收一个数字之后就要等待你输入一个空格;但,%d的规则却是跳过空格、回车、制表符来寻找数字——先是让你输入空格,可是一看是空格就等待其后的数字,这就一直停留在scanf函数上了,只有再输入一个数字或其他字符才能往下走。