在查找%d匹配时,Scanf功能是否忽略Enter键?

时间:2016-06-26 14:43:45

标签: c whitespace scanf format-specifiers

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

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

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键)对吗?

1 个答案:

答案 0 :(得分:3)

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

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

  

作为转换规范的指令定义了一组匹配的输入序列,如   下面针对每个说明符进行描述。转换规范按以下步骤执行:

     
      
  1. 跳过输入空白字符(由isspace函数指定),除非   该规范包括[cn说明符。 [....]
  2.   

所以,,任何前导空格(输入缓冲区中的被跳过或被忽略{{1} }。