My teacher said that I must add two complex numbers using a complex type. And I must add these numbers in a function. How to do that? I create something like that, but I have warning when I use cppcheck
add.c:53:26: error: Uninitialized variable: a1 [uninitvar]
double complex z1 = a1 + b1*I;
^
add.c:57:26: error: Uninitialized variable: a2 [uninitvar]
double complex z2 = a2 + b2*I;
^
add.c:53:31: error: Uninitialized variable: b1 [uninitvar]
double complex z1 = a1 + b1*I;
^
add.c:57:31: error: Uninitialized variable: b2 [uninitvar]
double complex z2 = a2 + b2*I;
^
add.c:34:29: error: Uninitialized variable: c1 [uninitvar]
double complex csum1 = c1 + d1*I;
^
add.c:34:34: error: Uninitialized variable: d1 [uninitvar]
double complex csum1 = c1 + d1*I;
^
add.c:52:15: error: Uninitialized variable: p [uninitvar]
readZ(wz, p, q);
^
add.c:52:18: error: Uninitialized variable: q [uninitvar]
readZ(wz, p, q);
^
add.c:56:15: error: Uninitialized variable: r [uninitvar]
readZ(wz, r, s);
^
add.c:56:18: error: Uninitialized variable: s [uninitvar]
readZ(wz, r, s);
^
add.c:59:18: error: Uninitialized variable: t [uninitvar]
sumZ(p,q,r,s,t,u);
^
add.c:59:20: error: Uninitialized variable: u [uninitvar]
sumZ(p,q,r,s,t,u);
This is my code
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <math.h>
#include <complex.h>
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
void readZ(FILE *wp, double *a, double *b)
{
char c;
assert(fscanf(wp,"%c%lg%c%lg%c%c",&c,a,&c,b,&c,&c));
}
int writeZ(FILE *wp, double complex z)
{
fprintf(wp, "%.2f, %.2f\n", creal(z), cimag(z));
return 1;
}
void sumZ(double *a1, double *a2, double *b1, double *b2, double *c1, double *c2)
{
*c1 = *a1 + *a2;
*c2 = *b1 + *b2;
}
int main (int argc, char *argv[])
{
FILE *wz, *wc;
double a1, a2, b1, b2, c1, d1;
double *p, *q, *r, *s, *t, *u;
double complex csum1 = c1 + d1*I;
if (argc != 3) {
printf("Wrong arguments number\n");
printf("I should run this way:\n");
printf("%s source result\n",argv[0]);
exit(1);
}
if( (wz= fopen(argv[1],"r")) == NULL) {
printf("Open error %s\n", argv[1]);
exit(1);
}
if( (wc= fopen(argv[2], "w")) == NULL) {
printf("Open error %s\n", argv[2]);
exit(2);
}
readZ(wz, p, q);
double complex z1 = a1 + b1*I;
writeZ(wc, z1);
printf("%.2f, %.2f\n", creal(z1), cimag(z1));
readZ(wz, r, s);
double complex z2 = a2 + b2*I;
printf("%.2f, %.2f\n", creal(z2), cimag(z2));
sumZ(p,q,r,s,t,u);
printf("%.2f, %.2f\n", creal(csum1), cimag(csum1));
return 0;
}
When I run my code like add.x data.txt result.txt I get a segmentation fault. He said that I can use references and pointers. I have no idea what I should do now.