我问一下为什么我的代码循环不了,只能循环一次就出来了

用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
操作数1 运算符op 操作数2
计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。

要求如下:
(1)要求程序能进行浮点数的算术运算,操作数1和2用float类型定义,运算符op用字符型定义。
(2)要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空白符
输入提示信息:"Please enter the expression:\n"
输入数据格式:"%f %c%f"
输出数据格式:以加运算为例:"%f+ %f = %f\n"
(3)要求连续做多次算术运算,每次运算结束后,程序都给出提示:
Do you want to continue(Y/N or y/n)?
用户输入Y或y时,程序继续进行其他算术运算;否则程序退出运行状态。
输入提示信息:"Do you want to continue(Y/N or y/n)?"
输入数据格式:" %c"
(4)如果输入错误的运算符,则输出"Unknown operator!\n",不结束程序运行,继续询问是否做下一次运算。
(5)如果除数为0,则输出"Division by zero!\n",不结束程序运行,继续询问是否做下一次运算。
(6)允许浮点数的误差在1e-7范围内。
提示:请直接拷贝粘贴题目中给定的格式字符串。

#include<stdio.h>
int main()
{
float a1,a2,b1;
char op,a;
a='y';

while(a=='y'||a=='Y')
{
    printf("Please enter the expression:\n");
    scanf("%f %c%f",&a1,&op,&a2);
    switch(op)
    {
        case'+':b1=a1+a2;printf("%f + %f = %f\n",a1,a2,b1);break;
        case'-':b1=a1-a2;printf("%f - %f = %f\n",a1,a2,b1);break;
        case'*':b1=a1*a2;printf("%f * %f = %f\n",a1,a2,b1);break;
        case'/':if(a2==0)
               {
                   printf("Division by zero!\n");
                   break;
               }
               b1=a1/a2;
               printf("%f / %f = %f\n",a1,a2,b1);
               break;
        default:printf("Unknown operator!\n");break;      
    }
    
    printf("Do you want to continue(Y/N or y/n)?");
    scanf("%c",&a);
}
return 0;

}



scanf("%f %c%f",&a1,&op,&a2);后面加一句getchar();来接收回车符,否则会影响scanf("%c",&a)的读取。
scanf("%c",&a);后面也加一句getchar();

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632