Я пишу код о вычитании, сложении, умножении и делении комплексных чисел.
ввод:
1+2i 2+2i +
вывод:
3+4i
Я использую Visual Studio 2013.
Он показывает неправильное сообщение о I : выражение должно иметь арифметический тип.< br> В строке:z1 = real+imag*I; z2 = real+imag*I;
Что мне делать, чтобы решить эту проблему?
Это мой код:
#include<stdio.h>
#include<complex.h>
#include<stdlib.h>
#define N 100
double ToNum(char *c);
int main(){
_Dcomplex z1, z2, z3;
char c1[N], c2[N];
char *p = c1;
char op;
double imag, real,op1, op2;
scanf("%s%s%c", c1, c2, &op);
real = ToNum(c1);
while (*p != '+' && *p != '-')
p++;
op1= *p == '+' ? 1 : -1;
imag = ToNum(++p);
imag *= op1;
z1 = real+imag*I;
real = ToNum(c2);
while (*p != '+' && *p != '-')
p++;
op2 = *p == '+' ? 1 : -1;
imag = ToNum(++p);
imag *= op2;
z2 = real + imag*I;
if (op == '+')
z3 = z1 + z2;
else if (op == '-')
z3 = z1 - z2;
else if (op = '*')
z3 = z1*z2;
else if (op == '/')
z3 = z1 / z2;
printf("%lf%+lfi\n", creal(z3), cimag(z3));
return 0;
}
double ToNum(char *c)
{
double num = 0;
num = atof(c);
return num;
}
complex
— это функция C99, я не думаю, что VC ее поддерживает. (msdn.microsoft.com/en-us/library/a86zba5c.aspx не указывает_Compex
в качестве спецификатора типа.) - person Mat   schedule 21.12.2014complex.h
для совместимости с C++11. Вам придется либо избегать компилятора Microsoft, если вы хотите использовать сложные типы C, либо вместо этого использовать сложные типы C++. - person Rufflewind   schedule 21.12.2014_Dcomplex
заменяется наdouble complex
, а ошибкаelse if (op = '*')
исправлено. Возможно, в stdlib.h определен символ, также названныйI
; попробуйте изменить порядок включения заголовков. - person Clifford   schedule 21.12.2014