getchar和scanf的碰撞

来源:百度知道 编辑:UC知道 时间:2024/07/04 05:21:14
#include <stdio.h>
void main()
{
char c1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar();
c6=getchar();
putchar(c1);
putchar(c2);
printf("%c%c\n",c5,c6);
}

输入123回车
45678回车

结果 1245

我想知道为什么?拜托说详细点
getchar 第一个不是1吗?

scanf函数按照要求读取4个1位数字,读取4位后退出。每读取一个字符,将输入缓冲区内的对应内容清空。因为是读取的是char类型,所以回车时输入的换行符也是有效字符。
当输入123回车时,c1,c2,c3,c4中的内容分别是1,2,3,'\n',同时输入缓冲区正好被读取完,所以缓冲区内无字符。
然后输入45678,由getchar读取,所以c5,c6分别被4,5填充。
所以得到的输出是1245。

scanf("%c%c%c%c",&c1,&c2,&c3,&c4);

这里读取了前4个字符(包括123后的回车符),所以到了c5=getchar();时,是从第二行输入开始读取的,所以c5就是'4',c6就是'5'

你前面不是用了SCANF吗,1都输入到C1里了,C1,C2,C3,C4分别为1,2,3还有回车
c5,c6为4,5,输出就是这结果啊