Why my code sometimes prints trash and other times not?

  • Thread starter Thread starter GustavoGG
  • Start date Start date
  • Tags Tags
    Code
AI Thread Summary
The discussion centers on a coding issue where the program sometimes outputs garbage values due to improper data type handling in C. The original code defines complex numbers incorrectly, leading to memory mismanagement when using `scanf`. It is suggested to define the variables as simple floats for the real and imaginary parts to align with the expected input format. The importance of compiling with warnings enabled is emphasized to catch potential type mismatches. Additionally, a historical perspective on complex number representation in C is provided, highlighting the evolution from structs to built-in complex types.
GustavoGG
Messages
2
Reaction score
0
TL;DR 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 >>
 
Technology news on Phys.org
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:
  • Informative
  • Love
Likes anorlunda and GustavoGG
Thanks it worked perfectly.
I did not know what you just explained but its clear and now I get it
 
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.
 
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.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...
Back
Top