scanf中的空间是什么意思?

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

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


繁花如伊
浏览 562回答 3
3回答

大话西游666

%c不会像数字格式说明符那样跳过空格字符。因此,如果您使用:#include<stdio.h>int&nbsp;main(int&nbsp;argc,&nbsp;char*&nbsp;argv[]){ &nbsp;&nbsp;char&nbsp;c; &nbsp;&nbsp;scanf("%c",&nbsp;&c); &nbsp;&nbsp;printf("%c\n",&nbsp;c); &nbsp;&nbsp;scanf("%c",&nbsp;&c);&nbsp;//&nbsp;Try&nbsp;running&nbsp;with&nbsp;and&nbsp;without&nbsp;space &nbsp;&nbsp;printf("%c\n",&nbsp;c); &nbsp;&nbsp;return&nbsp;0;}输入缓冲区中的前一个空格字符很有可能会在第二个scanf中被占用,并且您将没有机会键入。%c之前的空格将使scanf跳过输入缓冲区中存在的任何空白字符,以便您能够正确输入输入。有时,为了达到人们写的相同效果:fflush(stdin);scanf("%c"&nbsp;&c);但这被认为是非常糟糕的编程,因为C标准指定fflush(stdin)的行为未定义。因此,请始终在格式字符串中使用空格,除非您也有特殊原因要捕获空格。

白衣染霜花

空间scanf格式的意思是“跳过所有空白”从当前位置。由于大多数scanf格式说明符在尝试读取任何内容之前已经跳过了所有空格,因此scanf大多数时间都不会在格式中使用空格。但是,当您使用不忽略空格的格式说明符时,在必要时(强制跳过)在格式中包含空格可能是有意义的。不忽略空格的说明符是c&nbsp;[和n。因此,在这些说明符之一之前指定一个空格会有所不同。否则,它没有任何区别。在您的特定示例中,空白被特别忽略,因为您使用了scanf格式的空格(因为您正在使用%c)。尝试删除空间,然后看看会发生什么。

幕布斯7119047

scanf的文档说:由一个或多个空格字符组成的指令应通过读取输入来执行,直到无法再读取有效输入为止,或者直到第一个非空格字符的字节仍未读取。并且除非转换规范包括[,c,C或n转换说明符,否则应跳过输入的空白字符(由isspace指定)。这意味着需要使用格式字符串中的空格。但是,如果要读取整数,则该空间将是多余的:/*&nbsp;equivalent&nbsp;statements&nbsp;*/scanf("&nbsp;%d&nbsp;%d&nbsp;%d",&nbsp;&v1,&nbsp;&v2,&nbsp;&v3);scanf("%d%d%d",&nbsp;&v1,&nbsp;&v2,&nbsp;&v3);
打开App,查看更多内容
随时随地看视频慕课网APP