This code is meant to sort a list of movies from a file based on title, year, media and length. The format for the movie file is:
Code:
You've Got Mail,1998,109,DVD
Birthday Girl,2002,129,VHS
Get Shorty,1995,117,DVD
Spy Game,2001,120,DVD
About a Boy,2002,117,DVD
I'm looking to figure out what it is that I'm doing wrong. It outputs the first title many times. It looks like a loop problem but I can't figure it out. I don't expect this program to work magically but it seems I just can't find the problem. It outputs over and over again and I'm really not seeing the logic that causes it to run without more accurate output. I really need to figure out why it doesn't output
Code:
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
//Constants - This is used inside sort function to determine
//which field to sort on
const int MOVIE_TITLE = 0;
const int YEAR = 1;
const int MEDIA = 2;
const int LENGTH =3;
//Global Variables
string title[188];
string year[188];
string mediaType[188];
string length[188];
void Sort(const int col, int howMany, bool dir)
{
switch(col)
{
case MOVIE_TITLE:
{
string temp_title;
string temp_year;
string temp_mediaType;
string temp_length;
int limit = howMany;//The number of elements in the array to be searched
bool swapped = true;
int j = 0;
while(swapped)
{
/*j++;
cout << "iteration "<<j << endl; */
swapped = false;//No swapp has taken place
//Propagate through array
for(int sub=0;sub<limit - 1; sub++)
{
//dir - asc, or desc order, nothing to do with files
if(dir)
{
//ASCENDING
if(title[sub] > title[sub+1])
{
//elements are out of order..swap them
//Write first to temp
temp_title = title[sub];
temp_year = year[sub];
temp_mediaType = mediaType[sub];
temp_length = length[sub];
//Overwrite first with second
title[sub] = title[sub+1];
year[sub] = year[sub+1];
mediaType[sub] = mediaType[sub+1];
length[sub] = length[sub+1];
//Overwrite second with temp
title[sub+1] = temp_title;
/*cout << "TRACER2 = "<< title[sub+1] << endl<<cin.get();*/
year[sub+1] = temp_year;
mediaType[sub+1] = temp_mediaType;
length[sub+1] = temp_length;
swapped = true;
}
}
else
{
//DESCENDING
if(title[sub] < title[sub+1])
{
//elements are out of order..swap them
string temp_title = title[sub];
string temp_year = year[sub];
string temp_mediaType = mediaType[sub];
string temp_length = length[sub];
title[sub] = title[sub+1];
year[sub] = year[sub+1];
mediaType[sub] = mediaType[sub+1];
length[sub] = length[sub+1];
title[sub+1] = temp_title;
year[sub+1] = temp_year;
mediaType[sub+1] = temp_mediaType;
length[sub+1] = temp_length;
swapped = true;
}
}
}//end for()
limit--;
}//end while()
break;
}
case YEAR:
break;
case MEDIA:
break;
case LENGTH:
break;
}
}
int main()
{
//Declare vars
//File record
//int age;
//int code;
//Generalg
string record;
int recordcount = 0;
// int maxElements;
ifstream dataIn;
//Search
// string lookFor;
// int compares = 0;
//Open file
dataIn.open("Movies.dat");
if(dataIn.fail())
{
cout << "Unable to open the data file." << endl;
return 99;
}
//Read a record
getline(dataIn,record);
int delimiterposition; //location in the record of field separator (,)
recordcount = 0;
while(dataIn.eof() == false)
{
if(record == "")
{
break;
}
delimiterposition = record.find_first_of(',',0);
/*cout << "record="<<record<< endl;*/
if(record.substr(0,delimiterposition-0) == "")
{
break;
}
title[recordcount] = record.substr(0,delimiterposition-0);
delimiterposition = record.find_first_of(',',0);
year[recordcount] = record.substr(0,delimiterposition-0);
/*cout<< "TRACER3 year="<<year<<endl<<cin.get();*/
delimiterposition = record.find_first_of(',',0);
mediaType[recordcount] = record.substr(0,delimiterposition-0);
delimiterposition = record.find_first_of(',',0);
length[recordcount] = record.substr(0,delimiterposition-0);
recordcount++; //point to next element
getline(dataIn,record);
}//end of input loop
return 0;