Hi i've have this problem in my code when i do the overloading of operator >>. My problem for this code isnt encounter error but my input like say i input 7, the num.a output will change this 7 to 55 and num.b output for 5 to 53. below is the code.

class Complex
	friend istream& operator>>(istream&, Complex&);
	friend ostream& operator<<(ostream&, const Complex&);
	Complex(int a=0, int b=0) {};		// constructors
	Complex operator +(Complex);
	Complex operator *(Complex);
	bool operator ==(const Complex&) const;
	bool operator >(const Complex&) const;

	int a, b;	

istream& operator>>(istream &in, Complex &num)
    string line="";
    for(int i=0; i<line.length(); i++)
                 num.a = line[i];
            else if(i==4)
                 num.b = line[i];
	return in;

my format of input is (7+i3). This is a complex number format. Hope to hear the reply soon.Thanks

10 Years
Discussion Span
Last Post by wjyeo

Step by step.

1. Don't fflush(). There is no need and you shouldn't be mixing C and C++ I/O anyway.

2. You are mis-indexing the string: 01234 7+i3 Hence, line[1] == '+' and line[4] == '\0'. BTW, i never reaches 4 if your input is only four characters long.

3. You are not converting your numbers. The ASCII value of '+' is 43.

4. Your constructor should look like this: Complex( int _a=0, int _b=0 ): a( _a ), b( _b ) {}; or Complex( int _a=0, int _b=0 ) { a = _a; b = _b; } The first way is preferred.
The reason num.b is some weird number is because your constructor never initializes the private fields a and b. Having arguments with the same name makes no difference.

PS. Complex numbers are normally written a + bi. If you do the same you will have an easier time collecting and verifying input.

Hope this helps.


Thanks alot. actually my problem lies with the line thing, like you have explain. It turn out to be taken as ASCii '7' instead of int '7' thats y it output to 55. I actually did my changes by adding line - 48 to it to make it back to '7'. Really thanks alot abt the constructor thing.


> actually did my changes by adding line - 48 to it to make it back to '7'. line[i] - '0' would be much better; you program would then be not dependant on a particular character encoding.


Thanks alot for this '0' didnt realise can do it this way.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.