scanf中的空间是什么意思?

Je *_*Rog 8 c scanf

#include <stdio.h>
int main(int argc, char* argv[]) {
  char c;
  scanf(" %c", &c);
  printf("%c\n", c);
  return 0;
}

[root@test]# ./scanf 
a
a

[root@test]# ./scanf 
 h
h
Run Code Online (Sandbox Code Playgroud)

似乎总是匹配空间是否存在,为什么?

Vin*_*ura 9

格式字符串中的空格(例如空格,制表符或换行符)在输入中匹配任意数量的空格,包括空格.

http://www.manpagez.com/man/3/scanf/

  • @hexa:`fscanf`用于文本流.在文本流中,无论是Linux还是Windows都无关紧要,因为文本流会在任何平台上自动将特定于平台的行尾标记转换为单个"\n",然后才有机会进入` fscanf`. (2认同)

AnT*_*AnT 6

空间scanf格式的意思是“跳过所有空白”从当前位置。由于大多数scanf格式说明符在尝试读取任何内容之前已经跳过所有空格,因此scanf大多数时间格式中不使用空格。但是,当您使用不忽略空格的格式说明符时,必要时在格式中包含空格(以强制跳过)可能是有意义的。

不忽略空格的说明符是c [and n。因此,在这些说明符之一前面指定一个空格会有所不同。否则,它没有任何区别。在您的具体示例中,空格会被特别忽略,因为您在scanf格式中使用了空格(因为您正在使用%c)。尝试删除空间,看看会发生什么。