c++ - I am trying to make a robust class that can handle any erroneous input. it works fine until the last number in the file -


#ifndef rationalnumber_h #define rationalnumber_h  #include<iostream> using namespace std;   class rationalnumber {     friend ostream &operator<<(ostream &out,rationalnumber &r);     friend istream &operator>>(istream &in,rationalnumber &r);      private:         int numerator;         int denominator;     public:         rationalnumber(int n,int d);         rationalnumber();         operator void*(){return (numerator== 0 ? null :this);}  }; #endif   #include"rationalnumber.h" #include<stdexcept> #include<cmath>  rationalnumber::rationalnumber():numerator(1),denominator(1) { } rationalnumber::rationalnumber(int n,int d):numerator(n),denominator(d) {     if(denominator==0)         throw runtime_error("cant divide zero"); } ostream &operator<<(ostream &out,rationalnumber &r) {     if(r.denominator == 1 || r.denominator == -1 && r.numerator !=0)      {     if(r.denominator<0 && r. numerator <0)             out<<abs(r.numerator);         else if(r.denominator<0 || r.numerator<0)             out<<"-"<<abs(r.numerator);         else             out<<r.numerator;     }     else if(abs(r.denominator) == abs(r.numerator))     {         if(r.denominator<0 && r. numerator <0)             out<<"1";         else if(r.denominator<0 || r.numerator<0)             out<<"-"<<"1";         else if(r.denominator == 0 && r.numerator ==0)             out<<"nothing";         else              out<<"1 ";     }     else if(r.numerator<0 && r.denominator >0 ||r.numerator>0 && r.denominator<0)         out<<"-"<<abs(r.numerator)<<"/"<<abs(r.denominator);     else if(r.numerator<0 && r.denominator<0)         out<<abs(r.numerator)<<"/"<<abs(r.denominator);     else if(r.numerator ==0)         out<<r.numerator;     else if(r.numerator>0 && r.denominator>0)         out<<r.numerator<<"/"<<r.denominator;     else if(r.numerator ==null && r.denominator == null)         out<<" nothing "<<endl;      return out; } istream &operator>>(istream &in,rationalnumber &r) {     int top;     int bottom;     char divide;      r.numerator = 0;     r.denominator = 0;      in>>top;      if(in)     {         r.denominator = 1;          while (isspace(divide = in.peek())&& divide != '\n')             in.get();          if(divide !='\n')         {             if(divide =='/')             {                 in>>divide;                  while (isspace(bottom = in.peek()))                     in.get();                  in>>bottom;                  if(!in || bottom==0)                 {                     r.numerator=top;                     in.clear(ios::failbit);                 }                 else                 {                     r.numerator=top;                     r.denominator=bottom;                 }             }             else             {                 r.numerator=top;                 in.clear(ios::failbit);             }         }         else         {             r.numerator = top;         }      }     else         in.clear(ios::failbit);      return in; } 

/////////////////////////////////////////////////////////////////////////////////////////////////////

12/34       */this file im reading in from. class supposed 12             rational number class 23  23             read correctly without causing error.it 34             giving me problems last number in file. im not sure 23             whats going on*/ 

/////////////////////////////////////////////////////////////////////////////////////////////////////


Comments

Popular posts from this blog

asp.net mvc 3 - Using mvc3, I need to add a username/password to the sql connection string at runtime -

kineticjs - draw multiple lines and delete individual line -

thumbnails - jQuery image rotate on hover -