c语言中的char类型 输入了三个变量 但最终却只显示了2个是什么情况

#pragma warning(disable:4996)
#include <iostream> // 头文件
#include <cstdio>
//  计算机电路由逻辑门电路组成    开   关   高电位  低电位  1   0 (二进制) 比特  bit(b)

    //  八个二进制为一个字节 byte B 1024 1KB   1024 KB 1MB(1兆)1024 MB 1GB 1024GB 1TB

    //  0 和 1足以表示和传播各种信息  ASCII编码  2^8 = 256种 (图片 视频 可执行程序 也可以用0,1来表示)

    //  十进制与K进制之间的转换  略 十进制数是数的十进制表示形式  短除法

    //  K进制小数 (0.ABCDEF……G)'K = A * K^-1 + B * K^-2 +……+ G * K^-(N+1)

    //  (0.1)'3 = 1/3  由于存在无限循环小数 所以计算机的小数运算会有误差

    //  十六进制 10 - 15 A - F 小写也可以

    //  不同进制间的转换 4个二进制对应1个十六进制

    //  我现在正在学的是c语言 + STL(标准模板库 节省编程时间)
int main()
{
    using namespace std;

    printf("hello world\n"); // 字符串

    int a = 3;// 变量 用以存放数据 int 整数
    printf("i have %d dollars.\n", a);// %d表示输出一个整数 \n表示换行
    printf("i want to buy:\n a book.\n"); // 每条语句都有;
    

    int b,c ;
    scanf("%d%d", &b, &c); //scanf 输入功能函数  %d 等待输入一个整数 &b 把输入的整数放入变量b
    printf("%d", b + c);
    printf("\n");
    

    char x,y,z; // 字符类型变量
    scanf("%c%c%c",&x,&y,&z); // %c表示读入一个字符不会跳过空格
    printf("%c%c%c",x,y,z);

    //注释 用以理解程序 /*      /*多行    单行//

// 变量代表了系统分配的内存空间 变量的类型决定了其所占字节 变量需要先定义才能使用 定义变量的语句应出现在使用其的所有语句之前
// 命名规则 字母 数字 下划线 不能有空格 长度不限 不能数字开头 区分大小写
// 变量名不能与c++中的一些保留字重复 还不能取名为begin end next index list link
// 变量有数据类型(所占存储空间大小不同)  我们也可以自定义数据类型

// int long short char 的最高位为符号位 为1是负数 最高位为0时表示非负数 32个字节bits 2^31-1 

    int  n1 = 10;
    double d;
    char e; 
    printf("%d,%d,%d,%d",sizeof(n1),sizeof(double),sizeof(d),sizeof(char)); // size of 运算符求变量类型或变量所占的字节数
     
    return 0;
}


x

img

scanf("%c%c%c",&x,&y,&z); // %c表示读入一个字符不会跳过空格
这句之前加一句getchar();
因为前面的scanf输入时你按回车键了,回车键在输入缓冲区中,你输入三个字符的语句会自动把缓冲区中的回车键作为第一个字符接收了。所以你感觉少了一个字符。