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

时间:2015-01-13 14:58:22

标签: c newline stdin scanf

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

#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并将\n留在stdin
2 nd 中的一个不会使\n%d一起跳过它们,因此得到34. scanf也会留下\n个字符stdin 3 rd scanf得到第二个\n剩余的scanf
4 th scanf得到B并再次将\n留在stdin

我的问题是:为什么最后scanf消费了第一个\n剩余的scanf个字符?

1 个答案:

答案 0 :(得分:1)

跳过的字符不会在流中“离开”。输入流只能在一个方向读取一次, 1 所以一旦跳过一个字符,就会消失。

1 没有额外的好感,例如缓冲