c - 为什么在获取整数作为输入时不需要 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);
}
解决方案
为什么在获取整数作为输入时不需要 getchar() ?
根据提供的两个示例之间的差异来解释您的问题,您似乎在询问scanf
'%c
指令处理与指令处理之间的差异%d
。最简单的解释是scanf
的规范说,当它尝试匹配%d
指令时,它必须跳过任何前导空格。顺便说一句,它可以包含任意数量的字符,并且它可以识别比 ASCII 0x20 更多的字符作为空格。
这%c
实际上是这里的怪人。在所有scanf
匹配和转换输入的指令中,它是仅有的两个不跳过前导空格的指令之一。这是有道理的,因为它允许读取空格字符作为输入,并且因为您可以通过在(或任何其他)指令scanf()
之前立即将空格字符插入格式字符串中来指示它匹配(并因此跳过)前导空格。或者,您可以通过在格式中插入附加指令%c
来读取和忽略任何单个字符,就像您实际上所做的那样。getchar()
%*c
对大多数其他指令执行的空白跳过是为了满足固定格式的表格数据的便利,这些数据可能在各个项目之间具有不同的空间量。
推荐阅读
- javascript - 如何使用噩梦点击此链接?
- mysql - UNIX_TIMESTAMP 字段分区一整年
- ios - 奇怪的自动布局问题
- r - 在计算的 data.table 中创建新列,名称存储在另一个字符变量中
- angular - Angular 5:无法读取未定义的属性“USERID”
- jquery - 如何在不显示的情况下将字符串添加到字段输入?
- ionic-framework - 使用 Adobe Analytics 构建 Ionic
- javascript - 将coinmarketcap api v2与谷歌表格一起使用-通过多次调用添加到js对象
- javascript - 在这种情况下,$('id').on('click', this.method.bind(this)) 究竟做了什么?
- r - R:对日期间隔进行分类并在数据间隔之间添加行