无法进入while循环

问题遇到的现象和发生背景 编辑一个计算器,要求在输入数字和字符后能够开始运算,s为开始符号设置基础数字,e为终止符号,例如21s回车代表设置21为基础数字,9+回车代表在基础数字上面加9以此类推减法以及乘除法。
#include <stdio.h>

int main (void) {
    float x, z;
    char y;


    scanf("%f", &x);
    scanf("%c", &y);


    while (y == 's' || y == 'e' || y == '+' || y == '-' || y == '*' || y == '/') {

        if (y == 's') {
            z = x;
            printf("%f is your basic number now\n", z);
            scanf("%f", &x);
            scanf("%c", &y);
        }


        else if (y == 'e') {
            printf("end this program now\n");
            return 0;
        }


        else if (y == '+') {
            z = z + x;
            printf("%f add answer\n", z);
            scanf("%f", &x);
            scanf("%c", &y);
        }


        else if (y == '-') {
            z = z - x;
            printf("%f minus answer\n", z);
            scanf("%f", &x);
            scanf("%c", &y);
        }


        else if (y == '*') {
            z = z * x;
            printf("%f mutiply answer\n", z);
            scanf("%f", &x);
            scanf("%c", &y);
        } else {
            z = z / x;
            printf("%f divided answer\n", z);
            scanf("%f", &x);
            scanf("%c", &y);
        }

    }




    return 0;

}

用代码块功能插入代码,请勿粘贴截图
运行结果及报错内容 运行后在输入数字加e以后无法打印语句end this program now,但是直接输入e的话就可以运行,例如输入e加回车,就可以显示end this program now并结束程序,无报错。
我的解答思路和尝试过的方法 解答思路是没有进入while循环,但是输入的条件应该是满足的。
我想要达到的结果希望能够解决以上问题。

输入界面截图看一下
你的浮点数和字符e是分成两行输入的吧?那在输入e之前要加入一句getchar()接收到换行符。否则y接收的就是换行符,而不是e

同样的代码写了太多次了,罗里吧嗦的

#include <stdio.h>
 
int main (void) {
 
    float x,z;
    char y='1';
    while(y!='e')
    {
        scanf("%f%c", &x,&y);
        getchar();
        switch(y)
        {
        case 's':
            z=x;
            printf("%f is your basic number now\n", z);
            break;
        case '+':
            z+=x;
            printf("%f add answer\n", z);
            break;
        case '-':
            z-=x;
            printf("%f minus answer\n", z);
            break;
        case '*':
            z*=x;
            printf("%f mutiply answer\n", z);
            break;
        case '/':
            z/=x;
            printf("%f divided answer\n", z);
            break;
        }
    }
    printf("end this program now\n");
 
 
    return 0;
 
}

scanf会读取回车,你输入的时候注意输入格式了吗?

两次 scanf 调用的问题,建议把代码中 scanf("%f", &x); scanf("%c", &y); 都改为 scanf("%f %c", &x, &y); 。
发现有一篇博客也是同样的问题,并分析了原因:两次调用scanf函数的问题_@HDS的博客-CSDN博客_c语言第二次scanf有问题

应该写成scanf("%f%c",&x,&y); 这样应该就没问题了