为什么在获取整数作为输入时不需要getchar()?

时间:2019-01-18 19:31:36

标签: c

int main()
{
   char a,b;
   scanf("%c",&a);
   getchar();
   scanf ("%c",&b);
}

如果您不将getchar用于字符scanf,则将空格作为输入,但对于整数,则不需要getchar:

int main()
{
   int a,b;
   scanf("%d",&a);
   scanf ("%d",&b);
}

2 个答案:

答案 0 :(得分:1)

  

为什么在获取整数作为输入时不需要getchar()?

根据两个提供的示例之间的差异来解释您的问题,您似乎在询问scanf%c指令的处理与其对%d的处理之间的区别指令。最简单的解释是,scanf的规范表明,当它尝试匹配%d指令时,必须跳过任何前导空格。顺便说一句,它可以包含任意数量的字符,并且除了将ASCII 0x20识别为空格以外,还可以识别更多字符。

%c实际上是这里的奇数球。在所有匹配并转换输入的scanf伪指令中,它是请勿跳过前导空白的仅有的两个伪指令之一。这是有道理的,因为它允许scanf()读取空格字符作为输入,并且可以通过在{{1}之前的格式字符串中插入空格字符来指示它匹配(并因此跳过)前导空白。 }(或任何其他)指令。或者,您也可以像%c一样,通过在格式中插入一个额外的getchar()指令来读取和忽略任何个字符。

对大多数其他指令执行的空白跳过是一种方便,可满足固定格式的表格数据,这些数据在各个项目之间可能具有不同的空间量。

答案 1 :(得分:0)

  

为什么在获取整数作为输入时不需要getchar()?

"%d"跳过前导空格-包括前一个scanf("%c",&a);的左侧 enter
  "%c"不会。

  

输入空格字符(由isspace指定)被跳过,除非   该规范包括[cn规范符。
  C11dr§7.21.6.28