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空间是否存在似乎总是匹配的,为什么?
3 回答
大话西游666
TA贡献1817条经验 获得超14个赞
%c不会像数字格式说明符那样跳过空格字符。因此,如果您使用:
#include<stdio.h>int main(int argc, char* argv[]){ char c; scanf("%c", &c); printf("%c\n", c); scanf("%c", &c); // Try running with and without space printf("%c\n", c); return 0;}
输入缓冲区中的前一个空格字符很有可能会在第二个scanf中被占用,并且您将没有机会键入。%c之前的空格将使scanf跳过输入缓冲区中存在的任何空白字符,以便您能够正确输入输入。有时,为了达到人们写的相同效果:
fflush(stdin);scanf("%c" &c);
但这被认为是非常糟糕的编程,因为C标准指定fflush(stdin)的行为未定义。因此,请始终在格式字符串中使用空格,除非您也有特殊原因要捕获空格。
白衣染霜花
TA贡献1796条经验 获得超10个赞
空间scanf
格式的意思是“跳过所有空白”从当前位置。由于大多数scanf
格式说明符在尝试读取任何内容之前已经跳过了所有空格,因此scanf
大多数时间都不会在格式中使用空格。但是,当您使用不忽略空格的格式说明符时,在必要时(强制跳过)在格式中包含空格可能是有意义的。
不忽略空格的说明符是c
[
和n
。因此,在这些说明符之一之前指定一个空格会有所不同。否则,它没有任何区别。在您的特定示例中,空白被特别忽略,因为您使用了scanf
格式的空格(因为您正在使用%c
)。尝试删除空间,然后看看会发生什么。
幕布斯7119047
TA贡献1794条经验 获得超8个赞
- 3 回答
- 0 关注
- 561 浏览
添加回答
举报
0/150
提交
取消