scanf 在读取非空白字符或任何其他具有所有格式说明符(如 %d 、 %c 、 %s 和所有其他格式说明符)的数据之前会跳过空白字符。我说的是第一次出现的空白字符而不是后续的。例如,
#include<stdio.h>
#define N 10
int main(void){
char str[N];
scanf("%s",str);
return 0;
}
在这种情况下,scanf 将跳过第一次出现的空白字符并读取下一个非空白数据,然后如果再次遇到空白字符,它将退出读取。
大多数scanf()
格式说明符会自动跳过前导空格。空格包括换行符 - 请参阅isspace()
.
三个例外是%c
、扫描集(%[a-z]
等)和%n
.
请注意,格式字符串中的任何空白scanf()
都是跳过可选空白的明确指示。即如果有空格,则跳过;如果下一个字符不是空格,则没有空格可以跳过,但也没有错误。
POSIX 页面isspace()
遗漏了 C 标准中的一些信息:
标准的空白字符如下:空格 (
' '
)、换页 ('\f'
)、换行符 ('\n'
)、回车 ('\r'
)、水平制表符 ('\t'
) 和垂直制表符 ('\v'
)。在“C”语言环境中,isspace
仅对标准空白字符返回 true。
如果您想在非空白之前读取空白,您可能需要fgets
#include <stdio.h>
int main()
{
char n[10];
fgets(n,10,stdin);
printf("%s",n);
}
运行程序:
343 5 <<--Input
343 5 <<--Output