我已经写出代码,请问是哪里错了,请指教,感谢。

设有两个复数a+i*b和c+i*d,要求: 定义一个结构体类型来描述复数; 复数之间的加法、减法、乘法和除法分别用不用的函数来实现; 必须使用结构体指针的方法把函数的计算结果返回。 输入格式: 输入只有一行,其格式为:运算符号(+,-,*)a, b ,c, d。 输出格式: 输出:a+bi,输出时不管a ,b是小于0或等于0都按该格式输出,输出时a,b都保留两位。 注: 使用scanf和printf输入输出,要输出保留两位小数点,使用%.2lf。 测试举例: 测试输入:* 2.5 3.6 1.5 4.9。 预期输出:-13.89+17.65i。
#include
typedef struct{

double real;

double i;

}complex;
complex* add(complex a, complex c,complex b,complex d){

complex* ret = (complex*)malloc(sizeof(complex));
ret->real = a.real + c.real;

ret->i = b.i + d.i;
return ret;
}
complex* minus(complex a, complex c,complex b,complex d){

complex* ret = (complex*)malloc(sizeof(complex));

ret->real = a.real - c.real;

ret->i = b.i - d.i;

return ret;
}
complex* multiply(complex a, complex c,complex b,complex d){

complex* ret = (complex*)malloc(sizeof(complex));

ret->real = a.real*c.real + a.i*d.i;

ret->i = b.i*c.i - b.real*d.real;

return ret;
}
int main(){

char sign;

complex a,c;

complex b,d;

scanf("%c%lf%lf%lf%lf",&sign,&a.real,&b.i,&c.real,&d.i);

if( sign == '+' ){

add(a,b,c,d);

printf("%.2lf+%.2lfi\n",add(a,c,b,d)->real,add(a,b,c,d)->i); }

if( sign == '-' ){

minus(a,b,c,d);
printf("%.2lf+%.2lfi\n",minus(a,b,c,d)->real,minus(a,b,c,d)->i);
}
if( sign == '*' ){

multiply(a,b,c,d);

printf("%.2lf+%.2lfi\n",multiply(a,b,c,d)->real,multiply(a,b,c,d)->i);

}

return 0;
}

https://blog.csdn.net/u012181348/article/details/78199205