C里面的scanf对于空白字符的处理


写了点C的程序,写到scanf的时候,对于空白字符的处理有点迷惑,于是做了点小实验,并查了资料,在这里详细说说。

在scanf里面的第一个参数——格式化字符串s里面的空白字符的作用是对于输入里面的空白字符进行匹配。

在s里面的连续空白字符都会被当成一个空白字符处理。而一个空白字符对应输入里面的一段连续空白字符。当进行匹配的时候,他会一直匹配到下一个非空字符的出现才停止。

所以,如果有下面的语句:

int tmp;

scanf("%d ", &tmp);

而输入"12   "的时候,你会发现程序不会继续运行,而是仍然在等待你的下一次输入。这是因为在匹配完12并转换成int之后,后面的空白字符跟"%d "后面的空白字符进行匹配,而因为他是一直匹配到下一个非空白字符,所以当他匹配完所有的空格后,他仍然没有遇到一个非空字符,所以继续匹配,这时就等待你的输入。

所以一般来说,在格式串的最后都不要加空白字符。

相关内容