Why my code sometimes prints trash and other times not?

  • Thread starter GustavoGG
  • Start date
2
0
Summary
Im tring to use the library complex.h in C, but at the moment of compile and run it, the firsts times prints trash and then it runs well but after that one, again prints trash and thus, and i dont if the problem is with my computer or whats going on?
I send the next code to a friend and it runs him perfectly but not to me.
C:
#include<stdio.h>
#include<math.h>
#include<complex.h>
int main(){

    float complex a,b,x=2,y,z;
    printf("Write the real part followed by the imaginary part of your complex number: \n");
    scanf("%f %f",&a,&b);
    z=a+I*b;
    printf("z= %f + i%f\n",creal(z),cimag(z));
    y=cpow(z,x);
    printf("z2= %f + i%f\n",creal(y),cimag(y));

    return 0;
}
<< Mentor Note -- code tags added >>
 
10,811
4,349
why not define a and b as float values only?

float a,b;
float complex x=2,y,z;

to be consistent with the scanf format of "%f %f"

What I think is happening is that defining A and B to be float complex makes A and B each have an 8 byte memory location ie 4 bytes for the real part and four bytes for the imaginary part.

The scanf is reading in your data and converting your first text value to a four byte float to go into the real part of A and the second text value is converted into a four byte float for the real part of B meaning that imaginary parts of A and B are whatever is in memory when you program begins (ie memory is not always zeroed at startup).
 
Last edited:
2
0
Thanks it worked perfectly.
I did not know what you just explained but its clear and now I get it
 
1,502
609
Always compile with -Wall (or the "All Warnings" equivalent.)

Most compiles can do checks for type correctness on printf, scanf... even though they don't have to.

Put this code into your IDE
Code:
printf("%s %f %d %s", 1.0f, "Hello", (void*)0);
This code is perfectly valid C even though none of the types match and it doesn't even have right number of arguments, will compile, will also crash. Tweak your preferences until your IDE complains about this line.
 
10,811
4,349
One way early C programs used to define a complex number was to use a typedef struct:

C:
typedef struct COMPLEX {
    float real;
    float imag;
} complex:

complex x;

void main() {

    complex x;

    // INITIALIZING x
    x.real = 30.0;
    x.imag = 40.0;

    scanf(stdin,"%f %f", x.real, x.imag);

    printf("complex number: %10.4f +  %10.4fi", x.real, x.imag);
}
Of course, designers would add macros to handle setting values and basic arithmetic operations (like vectors) and working with the complex struct. Later compiler designers would extend these notions to handle complex numbers as part of our more modern languages.
 

Want to reply to this thread?

"Why my code sometimes prints trash and other times not?" You must log in or register to reply here.

Related Threads for: Why my code sometimes prints trash and other times not?

Replies
5
Views
730
  • Posted
Replies
3
Views
2K
Replies
6
Views
2K
  • Posted
Replies
5
Views
647
Replies
5
Views
10K

Physics Forums Values

We Value Quality
• Topics based on mainstream science
• Proper English grammar and spelling
We Value Civility
• Positive and compassionate attitudes
• Patience while debating
We Value Productivity
• Disciplined to remain on-topic
• Recognition of own weaknesses
• Solo and co-op problem solving
Top