View Single Post
  #1 (permalink)  
Old 12-13-2006, 09:04 AM
The_Master The_Master is offline
Newbie
 
Join Date: Dec 2006
Posts: 4
Rep Power: 0
The_Master is on a distinguished road
Default A small problem in the output

Hi guys how are you , hope you are ok. I have a small problem with my code. briefly my program is about chained sequence numbers which requires a user to enter sequences separated by (-1) in an input file as follow:
123 122 121
-1
45 67 89
-1

in the output file the following will be shown:
the sequence 123 122 121 is chained
the sequence 45 67 89 is not chained

( a sequence is called chained when a number is differs by one digit from the previous number )
As can be seen int input that i have to enter -1 between each sequence... that's ok. But my main problem is that i have to enter -1 also after the last entered sequence otherwise an error will be shown in the compiler. Therefore, how can i fix that problem... i tried too much times but i didn't reach to any thing.... i wonder if you could help me guys.
The code is :

Code:
#include <iostream>
#include <fstream>

using namespace std;

   bool differsByOneDigit ( int , int );
   void outputResults ( ostream & , const int * , int , bool );


int main()
{

   
   ifstream input ( "c:\\data.txt" );
   ofstream output ( "c:\\out.txt" );



   if ( input.fail() || output.fail() )
   {
       cout <<"input or output file did not open!!! " << endl;
       return 1;
   }

   int first  , next ; //32bit int == 2147483647
   int sequence [ 10 ];//sequence read
   int seqLength = 0; //sequence length
   int j;
   int temp;
   bool match; //matching sequence
   int firstSeq;


   if ( ! ( input >> temp ) )
   {
       //until you here otherwise, bad file format will be handled by program termination.
       cout << endl << "File has a non-int within";
       cout << endl << "Bad file format , terminating program!!! ";
       return 1;
   }
   else if ( temp > 1000000000 )
   {
       //until you here otherwise, number greater than 1 billion will be handled by program termination
       cout << endl << "File has number greater than 1 billion";
       cout << endl << "Too large number , terminating program!!! ";
       return 1;
   }

   while ( ! input.eof()  )
   {

       firstSeq = temp;
       //read next sequence
       while ( temp != -1 && seqLength < 10  && !input.eof()  )
       {
           sequence [ seqLength ++ ] = temp;
           if ( ! ( input >> temp ) )
           {
               //until you here otherwise, bad file format will be handled by program termination.
               cout << endl << "File has a non-int within";
               cout << endl << "Bad file format , terminating program!!! ";
               return 1;
           }
           else if ( temp > 1000000000 ) 
           {
               //until you here otherwise, number greater than 1 billion will be handled by program termination
               cout << endl << "File has number greater than 1 billion";
               cout << endl << "Too large number , terminating program!!! ";
               return 1;
           }
       }
       if ( temp != -1 )
       {
           //until you here otherwise, bad file format will be handled by program termination.
           cout << endl << "File has a sequence length greater than 10!!!";
           cout << endl << "Bad file format , terminating program!!! ";
           return 1;
       }
       if ( seqLength <= 1 )
       {
           cout << endl << "Sequence of one or less found!!";
           continue;
       }
       sequence [ seqLength ] = -1;
       j = 0;
       first = sequence [ j ];
       next = sequence [ j + 1 ];
       j += 2;
       match = true;
       while ( match && next != -1)
       {

           match = differsByOneDigit( first , next );
           first = next;
           next = sequence [ j ];
           j++;

       }
       if ( match )
           match = differsByOneDigit ( first , firstSeq ); //check front to back
       outputResults ( output , sequence , seqLength , match );
       if ( ! ( input >> temp ) )
       {
           if ( !input.eof() )
           {
               //until you here otherwise, bad file format will be handled by program termination.
               cout << endl << "File has a non-int within";
               cout << endl << "Bad file format , terminating program!!! ";
               return 1;
           }
       }
       else if ( temp > 1000000000 ) 
       {
           //until you here otherwise, number greater than 1 billion will be handled by program termination
           cout << endl << "File has number greater than 1 billion";
           cout << endl << "Too large number , terminating program!!! ";
           return 1;
       }
       seqLength = 0;
   }
   output.close();
   input.close();

   return 0;

}
bool differsByOneDigit ( int first , int next )
{

   int differentDigits = 0;

   while ( first != 0 && next != 0 && differentDigits <= 1 )
   {
       if ( first % 10 !=  next % 10 ) //count different digits
           differentDigits ++;
       first /= 10;
       next /= 10;

   }
   if ( differentDigits > 1 || first || next )
       return false;
   else
       return true;

}
void outputResults ( ostream & output , const int * sequence  , int length , bool isChainedSequence )
{

   int j = 0;

   output << "The sequence : ";

   while ( j < length )
   {
       output << sequence [ j ++ ] << " " ;
       if ( j % 7 == 0 )
           output << endl;
   }
   if ( isChainedSequence )
       output << endl << "Is a chained sequence " << endl;

   else
       output << endl << "is a not a chained sequence " << endl;;

   output << endl <<"****************************************************" << endl;

}
Regards
Reply With Quote

Sponsored Links