为什么多个 `\n` 字符不会出现在标准输入流中?

Why doesn't multiple `\n` characters end up in the standard input stream?

这个问题一直困扰着我。考虑以下程序:

#include <stdlib.h>
#include <stdio.h>

int main(void){

  char one,mid,final;
  int num;

  printf("Enter the first character:\n");
  scanf("%c",&one);

  printf("Enter any integer:\n");
  scanf("%d",&num);

  printf("Enter the middle character:\n");
  scanf("%c",&mid);

  printf("Enter the final character:\n");
  scanf("%c",&final);

  printf("You have entered\n");
  printf("\"%c\" and \"%d\" and \"%c\" and \"%c\"\n",one,num,mid,final);

  return EXIT_SUCCESS;
}

假设输入是

A\n
34\n
B\n

这里,

第一个 scanf 获得 A 并在 stdin 中留下 \n
2nd 不消耗 \n,因为 %d 跳过它们,因此得到 34。这个 scanf 也留下 \n stdin.
中的字符 3rd scanf 得到第二个 scanf.
剩下的 \n 第 4th scanf 得到 B 并再次将 \n 留在 stdin.

我的问题是:为什么最后一个 scanf 不消耗第一个 scanf 留下的 \n 字符?

跳过的字符不在流中 "left"。输入流只能在一个方向上读取一次,1 所以一旦一个字符被跳过,它就消失了。

1 没有额外的幻想,比如缓冲