Scanf 函数在查找 %d 匹配项时是否会忽略 Enter 键?

Does Scanf function ignore the Enter key when looking for %d match?

我是 C 语言的新手,我正在研究 Kim N. King 的一本书。它说 scanf() 寻找忽略空格的数字模式,但我认为它也会跳过 Enter 键。而如果它寻找字符,它显然也需要空格。

因此在这个示例代码中,我必须在第二个 scanf() 之前使用 getchar() 清除流,否则第二个将在不等待用户输入的情况下执行。

printf("Enter a char: ");
scanf("%c", &ch1);
getchar();
printf("\nEnter another char: ");
scanf("%c", &ch2);

如果我改为查找数字,我没有问题。

printf("Enter a number: ");
scanf("%d", &n1);
printf("\nEnter another number: ");
scanf("%d", &n2);

我的假设(跳过回车键)对吗?

ENTER 键输入一个 newline (\n),这是一个空白字符。

引用 C11,章节 §7.21.6.2,fscanf()

A directive that is a conversion specification defines a set of matching input sequences, as described below for each specifier. A conversion specification is executed in the following steps:

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

因此,,任何前导空格(存在于输入缓冲区)都被跳过 或忽略 %d.