switch case语句,多次输入输出字符运算

#include
int main()
{
double a,b,c,d;
char e;
do{
scanf("%c",&e);
scanf("%lf % % %",&a,&b,&c,&d);
switch(e){
case '+':printf("%f ",(a1.0/b)+(c1.0/d)),printf("%f\n",a+b+c+d);break;
case '-':printf("%f ",(a1.0/b)-(c1.0/d)),printf("%f\n",a-b-c-d);break;
case '':printf("%f ",(a1.0/b)(c1.0/d)),printf("%f\n",abcd);break;
case '/':printf("%f ",(a
1.0/b)/(c*1.0/d)),printf("%f\n",a/b/c/d);break;
case '0':break;
default:break;
}
}while(e!=0);
return 0;
}
我不理解,为什么在+-先输入任何一个字符,第二次再次输入就变成了执行default语句
(不让写重复字符,所以%lf省略)

残留字符保留在缓冲区里,下次当作字符读入了,修改如下,供参考:

#include <stdio.h>
int main()
{
    double a,b,c,d;
    char e;
    do{
        scanf("%c",&e);
        getchar();       //修改
        scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
        getchar();       //修改
        switch(e){
            case '+':
                     printf("%f ",(a*1.0/b)+(c*1.0/d));
                     printf("%f\n",a+b+c+d);
                     break;
            case '-':
                     printf("%f ",(a*1.0/b)-(c*1.0/d));
                     printf("%f\n",a-b-c-d);
                     break;
            case '*':
                     printf("%f ",(a*1.0/b)*(c*1.0/d));
                     printf("%f\n",a*b*c*d);
                     break;
            case '/':
                     printf("%f ",(a*1.0/b)/(c*1.0/d));
                     printf("%f\n",a/b/c/d);
                     break;
            case '0':break;
            default:break;
        }
    }while(e != '0');  //(e != 0) 修改

    return 0;
}