c - 具有不同格式说明符的 scanf 函数的不同行为

标签 c scanf format-specifiers

当我将 scanf 与 %d 或 %f 一起使用时,它会跳过空白字符。另一方面,当与 %c 一起使用时,它会读取空白字符。有人可以详细说明为什么会发生这种情况吗?

像下面的代码一样使用 %d 或 %f 会自动跳过空白字符

#include<stdio.h>
void main(void)
{
int i;
scanf("%d ",&i);
}

如果我像这样读取输入

#include<stdio.h>
void main(void)
{
char ch;
scanf(" %c ",&ch);
scanf(" %c",&ch);  /*or like this*/
}

它会跳过空白字符。 为什么 scanf 使用格式说明符显示不同的行为???

最佳答案

基本上,这是因为空白字符对于 %d%f 无效,因此它们会跳过它们。

但是空白字符是有效字符,因此 %c 将尝试处理它。

C99 §7.19.6.2 The fscanf function section 8

Input white-space characters (as specified by the isspace function) are skipped, unless the specification includes a [,c,or n specifier.

关于c - 具有不同格式说明符的 scanf 函数的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18443577/

相关文章:

c - TCP多客户端服务器程序

c - 应用程序在不同机器上的行为不同

c - 如何返回矩阵?

c - Scanf 和一个手动函数一起工作时获取字符串

c - 使用 scanf() 时的段错误

c - 我应该如何打印像 off_t 和 size_t 这样的类型?

string - $d 在 printf 中做什么?

c - 如果我在全局范围内声明一个没有大小的数组,我会得到什么?

c++ - 模板参数的格式规范

c - 如何使用 getchar() 扫描一个单词