为了账号安全,请及时绑定邮箱和手机立即绑定

scanf中的空间是什么意思?

scanf中的空间是什么意思?

C
繁花如伊 2019-09-26 14:43:54
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)的行为未定义。因此,请始终在格式字符串中使用空格,除非您也有特殊原因要捕获空格。


查看完整回答
反对 回复 2019-09-26
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

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

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


查看完整回答
反对 回复 2019-09-26
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

scanf文档说:

由一个或多个空格字符组成的指令应通过读取输入来执行,直到无法再读取有效输入为止,或者直到第一个非空格字符的字节仍未读取。

并且

除非转换规范包括[,c,C或n转换说明符,否则应跳过输入的空白字符(由isspace指定)。

这意味着需要使用格式字符串中的空格。但是,如果要读取整数,则该空间将是多余的:

/* equivalent statements */scanf(" %d %d %d", &v1, &v2, &v3);scanf("%d%d%d", &v1, &v2, &v3);


查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 561 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信