编程出现问题,如何解决?

刚学编程,想写个能运算四则运算的程序,为啥提示我出现严重错误啊
#include
int main() {
double a, b, c, d,x,y,t;
char op,tmp;
printf("\n请输入第一个复数的实部和虚部:");
scanf_s("%lf %lf", &a, &b);
printf("\n请输入运算符:");
scanf_s("%c %c",&tmp,&op );
printf("\n请输入第二个复数的实部和虚部:");
scanf_s("%lf %lf", &c, &d);
switch (op) {
case'+':
x = a + b;
y = c + d;
break;
case'-':
x = a - b;
y = c - d;
break;
case'*':
x = a * c - b * d;
y = b * c + a * d;
break;
case'/':
t = c * c - d * d;
if (t==0) {
printf("分母不为零");
return 0;
}
else
x = (a * c + b * d) / (c * c - d * d);
y = (b * c - a * d) / (c * c - d * d);
break;
default:
printf("invalidation operator\n");
return 0;
}
printf("复数的运算的结果为:%lf+%lfi",x,y);
return 0;
}

img

使用fflush(stdin);来避免读入换行符是比较稳定的,使用%c来读入容易出错

img

首先指出:复数加减是实部相加减,虚部相加减的,应该是x=a+c;y=b+d;减法亦然。

然后t是double,直接==0可能会出现判断错误问题的。应该定义int t,然后t = (int)( c * c - d * d);否则会出现分母为零的除法导致程序严重错误。

最后在switch中最好不要直接return ,不满足就使用break;可以初始化x,y。那么就不用担心最后的打印问题,可以来一个标志,bool flag,判断有无参加运算。没有就不打印嘛

#include<stdio.h>
int main() {
double a, b, c, d,x=0.0,y=0.0;
int t;
bool flag = false;
char op,tmp;
printf("\n请输入第一个复数的实部和虚部:");
scanf_s("%lf %lf", &a, &b);
printf("\n请输入运算符:");
scanf_s("%c %c",&tmp,&op );
printf("\n请输入第二个复数的实部和虚部:");
scanf_s("%lf %lf", &c, &d);
switch (op) {
case'+':
x = a + c;
y = b + d;
flag = true;
break;
case'-':
x = a - c;
y = b - d;
flag = true;
break;
case'*':
x = a * c - b * d;
y = b * c + a * d;
flag = true;
break;
case'/':
t = (int)(c * c - d * d);
if (t==0) {
printf("除法,分母为零,不可计算退出");
}
else{
x = (a * c + b * d) / (c * c - d * d);
y = (b * c - a * d) / (c * c - d * d);
flag = true;
}
break;
default:
printf("invalidation operator\n");
break;
}
if(flag){
printf("复数的运算的结果为:%lf+%lfi",x,y);
}
return 0;
}
```c


```