首页 > 解决方案 > 为什么在获取整数作为输入时不需要 getchar() ?

问题描述

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);
}

标签: c

解决方案


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

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

%c实际上是这里的怪人。在所有scanf匹配和转换输入的指令中,它是仅有的两个跳过前导空格的指令之一。这是有道理的,因为它允许读取空格字符作为输入,并且因为您可以通过在(或任何其他)指令scanf()之前立即将空格字符插入格式字符串中来指示它匹配(并因此跳过)前导空格。或者,您可以通过在格式中插入附加指令%c来读取和忽略任何单个字符,就像您实际上所做的那样。getchar()%*c

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


推荐阅读