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:
- Input white-space characters (as specified by the
isspace
function) are skipped, unless
the specification includes a [
, c
, or n
specifier. [....]
因此,是,任何前导空格(存在于输入缓冲区)都被跳过 或忽略 %d
.
我是 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:
- Input white-space characters (as specified by the
isspace
function) are skipped, unless the specification includes a[
,c
, orn
specifier. [....]
因此,是,任何前导空格(存在于输入缓冲区)都被跳过 或忽略 %d
.