1

scanf 在读取非空白字符或任何其他具有所有格式说明符(如 %d 、 %c 、 %s 和所有其他格式说明符)的数据之前会跳过空白字符。我说的是第一次出现的空白字符而不是后续的。例如,

#include<stdio.h>
#define N 10
int main(void){
char str[N];
scanf("%s",str);
return 0;
}

在这种情况下,scanf 将跳过第一次出现的空白字符并读取下一个非空白数据,然后如果再次遇到空白字符,它将退出读取。

4

2 回答 2

3

大多数scanf()格式说明符会自动跳过前导空格。空格包括换行符 - 请参阅isspace().

三个例外是%c、扫描集(%[a-z]等)和%n.

请注意,格式字符串中的任何空白scanf()都是跳过可选空白的明确指示。即如果有空格,则跳过;如果下一个字符不是空格,则没有空格可以跳过,但也没有错误。


POSIX 页面isspace()遗漏了 C 标准中的一些信息:

标准的空白字符如下:空格 ( ' ')、换页 ( '\f')、换行符 ( '\n')、回车 ( '\r')、水平制表符 ( '\t') 和垂直制表符 ( '\v')。在“C”语言环境中,isspace仅对标准空白字符返回 true。

于 2013-08-30T19:49:06.603 回答
0

如果您想在非空白之前读取空白,您可能需要fgets

#include <stdio.h>

int main()
{
        char n[10];
        fgets(n,10,stdin);
        printf("%s",n);
}

运行程序:

   343  5   <<--Input
   343  5   <<--Output
于 2013-08-31T03:38:13.853 回答