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);
}
答案 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
指定)被跳过,除非 该规范包括[
,c
或n
规范符。
C11dr§7.21.6.28