读取标准输入时scanf的行为

时间:2013-08-30 19:45:28

标签: c scanf

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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


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

  

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

答案 1 :(得分:0)

如果您想在非空白区域之前阅读空白区域,则可能需要fgets

#include <stdio.h>

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

运行程序:

   343  5   <<--Input
   343  5   <<--Output