### Rational numbers input

 ``1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950`` ``````//My "rational" class is made up of two int: "num", the nominator, and "den", the denominator. istream& operator >> (istream& Is, rational& r) { char c; //Test char. double n; //Could be either the numerator of the fraction or the antiperiod of the repeating decimal number. Is >> n; int i = 0; for (; n*10-pow(10, i+1) < 1 && int(n) != 0; i++) { n *= 10; } for (; int(n*10) % 10; i++) { n *= 10; } n /= pow(10, i); if (i == 0) { r.num = n; Is >> ws; c = Is.peek(); if (c == '/') { c = Is.get(); Is >> r.den; } else { r.den = 1; } r.normalize(); //This function normalizes the fraction. } else { Is >> ws; c = Is.peek(); if (c == 'p' || c == 'P') { int p; //Period of the repeating decimal number. c = Is.get(); Is >> p; vector a = genFrac(n, p); //This function returns the fraction which express the decimal repeating number. r.num = a[1]; r.den = a[0]; } else { i = 0; for (; n*10-pow(10, i+1) < 1 && int(n) != 0; i++) { n *= 10; } for (; int(n*10) % 10 != 0; i++) { n *= 10; } int pot10 = pow(10, i); r.num = n; r.den = pot10; } r.normalize(); } return Is; }``````

I wrote this code to implement the input of my "rational" class.
I modified it from the one written in my C++ book in order to make possible the input of decimal numbers, including repeating ones.

It should be able to handle these types of input:

a) `9/8`
b) `9`
c) `9.87`
d) `1.p3` (= 1.3333333333)

But it doesn't work, not even the part I copied from the book.

Can anyone help me?
Topic archived. No new replies allowed.