这个问题一直困扰着我。请考虑以下程序:
#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
个字符?
答案 0 :(得分:1)
跳过的字符不会在流中“离开”。输入流只能在一个方向读取一次, 1 所以一旦跳过一个字符,就会消失。
1 没有额外的好感,例如缓冲