Макрос I в ‹complex.h› в c

Я пишу код о вычитании, сложении, умножении и делении комплексных чисел.

ввод:
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;
}

person NaiveRed    schedule 21.12.2014    source источник
comment
complex — это функция C99, я не думаю, что VC ее поддерживает. (msdn.microsoft.com/en-us/library/a86zba5c.aspx не указывает _Compex в качестве спецификатора типа.)   -  person Mat    schedule 21.12.2014
comment
Я почти уверен, что Visual Studio поддерживает комплексные числа очень неполный. Они только добавили достаточно частей complex.h для совместимости с C++11. Вам придется либо избегать компилятора Microsoft, если вы хотите использовать сложные типы C, либо вместо этого использовать сложные типы C++.   -  person Rufflewind    schedule 21.12.2014
comment
Работает на ideone.com/5wiHB6, когда используется компиляция C99, нераспознанный _Dcomplex заменяется на double complex, а ошибка else if (op = '*') исправлено. Возможно, в stdlib.h определен символ, также названный I; попробуйте изменить порядок включения заголовков.   -  person Clifford    schedule 21.12.2014
comment
Он использует Visual Studio с ужасной поддержкой C99.   -  person Rufflewind    schedule 21.12.2014
comment
Однако его поддержка C++ хороша, и у него гораздо лучшая поддержка комплексных чисел.   -  person Clifford    schedule 21.12.2014