CS 3358 (Data Structures and Algorithms) by Lee S. Koh

Using putse to Assist in Reformatting Poorly Formatted Code
Example 1: Code As Turned In


#include <fstream>
#include <iostream>
#include <iomanip>   //for output formatiing
#include <cstdlib>  // for exit(), EXIT_SUCCESS, EXIT_FAILURE
#include <cctype>  // for isspace()

using namespace std;

int main()
 {
 int checkInputFile ();

    if (!checkInputFile()) {
    cout << "Input file is not in correct format." << endl;
         exit (1);
       }

      ifstream fin("./scores.dat", ios::in);
      ofstream fout("./output.dat", ios::out);

     if ( fin.fail() ){
    cout << "Error opening input Score file scores.dat" << endl;
     exit(EXIT_SUCCESS);
     }

     if (fout.fail()) {
  cout << "Error opening output Score file output.dat" << endl;
  exit(EXIT_SUCCESS);
       }

    int lineNum = 0, numOfValues, value, NumOfTests;
    int leastScore = 0, SecondleastScore = 0, stdID, TotalScore = 0;

    fin >> ws;              // "eat" up any preceding whitespaces

    while ( ! fin.eof() )  // as long as eof has not been encountered
     {
       lineNum++;
       fin >> value;
        if (lineNum == 1) {

   NumOfTests = value;
        fout << "Maximum number of scores each student can have is " << NumOfTests << "." << endl;

   fout << endl;

   fout << setiosflags (ios::fixed)
          << setw (20)
          << "Student ID"
          << setw (20)
          << "Quizzes Taken"
          << setw (20)
          << "Quizzes Missed"
          << setw (20)
          << "Scores Average"
          << resetiosflags (ios::fixed)
          << endl;

      fout << setiosflags (ios::fixed)
          << setw (20)
          << "----------"
          << setw (20)
          << "--------------"
          << setw (20)
          << "--------------"
          << setw (20)
          << "--------------"
          << resetiosflags (ios::fixed)
          << endl;

   continue;
        }

       numOfValues = 1;
       stdID = value;

       while ( fin.peek() != '\n' )                     // next character is not "newline"
       {
          if ( isspace(fin.peek()) || fin.peek() == '$') // next character is whitespace
          fin.ignore();                                 // read and discard next character

          else  {                                      // next character is part of a value
          fin >> value;
     TotalScore += value;

           if (numOfValues == 1) {
      leastScore = value;
      numOfValues++;
           continue;
       }
       if (numOfValues == 2) {
   SecondleastScore = value;
   numOfValues++;
   continue;
          }

        if (SecondleastScore > value) {

                   if (leastScore > value) {
    leastScore = value;
         }
                   else {
    SecondleastScore = value;
              }
        }

            numOfValues++;
          }
      }

      float actualScore = 0, ActualAvg = 0;
      numOfValues--;

      if (numOfValues == NumOfTests) {

       actualScore = TotalScore - leastScore - SecondleastScore;
       ActualAvg = (float) actualScore/(NumOfTests - 2);
       fout << setiosflags (ios::fixed | ios::showpoint)
            << setprecision(1)
       << setw (20)
       << stdID
       << setw (20)
       << numOfValues
       << setw (20)
       << (numOfValues - NumOfTests)
       << setw (20)
       << ActualAvg
       << resetiosflags (ios::fixed)
       << endl;

      } 
 else if (numOfValues == (NumOfTests - 1)) {

  actualScore = TotalScore - leastScore;
  ActualAvg = (float) actualScore/(NumOfTests - 1);
  fout << setiosflags (ios::fixed | ios::showpoint)
            << setprecision(1)
       << setw (20)
       << stdID
       << setw (20)
       << numOfValues
       << setw (20)
       << (NumOfTests - numOfValues)
       << setw (20)
       << ActualAvg
       << resetiosflags (ios::fixed)
       << endl;

      } 
 else if (numOfValues <= (NumOfTests - 2)) {

  ActualAvg = (float) TotalScore/(NumOfTests-2);
  fout << setiosflags (ios::fixed | ios::showpoint)
            << setprecision(1)
       << setw (20)
       << stdID
       << setw (20)
       << numOfValues
       << setw (20)
       << (NumOfTests - numOfValues)
       << setw (20)
       << ActualAvg
       << resetiosflags (ios::fixed)
       << endl;
      }

      TotalScore = 0;

      fin >> ws; 
    }

    fin.close();
    fout.close();
    return EXIT_SUCCESS;

 
 

/// Check Input file.

 int checkInputFile () {

     ifstream fin("./scores.dat", ios::in);

      if ( fin.fail() ) {
       cout << "Error opening input Score file scores.dat" << endl;
       exit(EXIT_SUCCESS);
      }

     fin >> ws;

     int lineNum = 0, Tests = 0,stdID = 0, value, NumOfVal, eolFlag = 0;

      while (!fin.eof()) {
  lineNum++;
  fin >> value;

   if (lineNum == 1) {
   Tests = value; 
   NumOfVal = 1;
    while (fin.peek() != '\n') {

     if (isspace (fin.peek())) {
     fin.ignore();
     }
     else {
     NumOfVal++;
     }
    }
   if (NumOfVal != 1) {
   cout << "First line of the input file should contain only the no. of tests." << endl;
   exit (1);
 } 
 continue;
 } 
  NumOfVal = 0;
  eolFlag = 0;

  while ( fin.peek() != '\n' ) {   // next character is not "newline"

   if ( isspace(fin.peek()))  // next character is whitespace
         fin.ignore();             // read and discard next character
          else                     // next character is part of a value
          {
            fin >> value;
       NumOfVal++;
       if (value == '$') {
   eolFlag = 1;
   continue;
       }

         if (value < 0 || value > 100 || eolFlag == 1) {
    cout << "Input file contains invalid Student Scores." << endl;
   exit (1);
             }
  }
  } 
  }
  fin.close();
  return 1;
 }