Thread: Memory Error

  1. #1
    Registered User
    Join Date
    Sep 2001
    Posts
    10

    Memory Error

    I'm receiving a memory error on exiting my program. The error does not occur when the file, that is read from and written to, doesn't exist.

    If you compile the code, the first time you run the program it will exit correctly, but on any subsequent attempts (after it has created the file on the successful exit), it gets a memory error.

    I have included two pieces of code:
    The first is just the reading and writing to and from the file (it also errors, but not the same memory values as the full program) and the second is the entire program.

    CODE 1:
    ===========================================
    Code:
    #include <iostream>
    #include <iomanip>
    #include <fstream>
    #include <cstring> 
    #include <cstdlib> 
    #include <cctype> 
    
    using namespace std;
    
    //Info struct is data type
    struct info
    {
    	
    	char date[30];
    	char op[20];
    	int bthNum;
    	int trk, bus, pass;
    	int util, mbike, semi, four;
    	double total;
    	
    };
    
    //functions used to run the program
    void getInfo(info[], int);
    void fillArray(ifstream, info[], int);
    void writeInfo(info[], int);
    
    void main()
    {
    	int choice = 0;
    
    	//create new data type - 'info' struct called 'data'
    	info data[5] = {"","",0,0,0,0,0,0,0,0,0};
    	
    	//open the input file on disk
    	ifstream inFile; 
    	inFile.open("C:\\data.dat", ios::in);
    
    	
    	if (!inFile.fail())
    		
    	{	
    		fillArray(inFile, data, 5);
    
    		inFile.close();
    	}
    
    				
    	else
    	{
    
    		cout<<"Error finding or creating file 'C: data.dat'"<<endl;
    		
    	}
    
    	writeInfo(data, 5);
    
    }
    
    //Fill function - fills with data from disk
    void fillArray(ifstream input, info inputdata[], int size)
    
    {
    	for(int i=0; i<=size;i++)
    	{
    
    					input.get(inputdata[i].date,30, '#');
    					input.ignore(1);
    					input.get(inputdata[i].op, 20,'#');
    					input.ignore(1);
    					input>>inputdata[i].bthNum;
    					input.ignore(1);				
    					input>>inputdata[i].trk;
    					input.ignore(1);
    					input>>inputdata[i].bus;
    					input.ignore(1);
    					input>>inputdata[i].pass;
    					input.ignore(1);
    					input>>inputdata[i].util;
    					input.ignore(1);
    					input>>inputdata[i].mbike;
    					input.ignore(1);
    					input>>inputdata[i].semi;
    					input.ignore(1);
    					input>>inputdata[i].four;
    					input.ignore(1);
    					input>>inputdata[i].total;
    					input.ignore(1);
    									
    			}
    	
    }
    
    //Write function - writes all data to disk
    void writeInfo(info data[], int)
    {
    		//open file
    		ofstream outData;
    		outData.open("C:\\data.dat", ios::out);
    
    		if(!outData.fail())
    		{
    
    			for(int i=0; i<5; i++)
    					{
    						outData<<data[i].date<<'#'
    							<<data[i].op<<'#'
    							<<data[i].bthNum<<'#'
    							<<data[i].trk<<'#'
    							<<data[i].bus<<'#'
    							<<data[i].pass<<'#'
    							<<data[i].util<<'#'
    							<<data[i].mbike<<'#'
    							<<data[i].semi<<'#'
    							<<data[i].four<<'#'
    							<<data[i].total<<endl;
    						
    					}
    					
    					outData.close();
    		}
    		else
    		{
    			cout<<"error opening file"<<endl;
    		}
    
    		
    }
    =============================================
    CODE 2:
    ===========================================
    Code:
    #include <iostream> 
    #include <cstring> 
    #include <cstdlib> 
    #include <fstream> 
    #include <cctype> 
    #include <iomanip>
    
    using namespace std;
    
    //Info struct is data type
    struct info
    {
    	
    	char name[30];
    	char date[30];
    	int booth;
    	int truk, bus, pass, pasv, bike, semi, four;
    	double total;
    	
    };
    
    //functions used to run the program
    void menu(info data[], int size);
    void getInfo(info[], int);
    char* checkstring(char[30], char*);
    int VehicleInput(char[5], int&);
    void fillArray(ifstream, info[], int);
    void writeInfo(info[], int);
    void getReport(info data[], int size);
    void exit();
    
    void main()
    {
    	int choice = 0;
    
    	//create new data type - 'info' struct called 'data'
    	info data[5] = {"","",0,0,0,0,0,0,0,0,0};
    	
    	//open the input file on disk
    	ifstream inFile; 
    	inFile.open("C:\\info.tb", ios::in);
    
    	if (!inFile.fail())	
    	{	
    		fillArray(inFile, data, 5);
    		inFile.close();
    	}
    		
    	else
    	{
    		cout << "Error finding or creating file C:info.tb" << endl;
    	}
    
    	menu(data, 5);
    	
    	writeInfo(data, 5);
    }
    
    //Fill function - fills with data from disk
    void fillArray(ifstream input, info inputdata[], int size)
    
    {
    	for(int i=0; i<=size;i++)
    	{
    			input.get(inputdata[i].date,30, '#');
    			input.ignore(1);
    			input.get(inputdata[i].name, 20,'#');
    			input.ignore(1);
    			input>>inputdata[i].booth;
    			input.ignore(1);				
    			input>>inputdata[i].truk;
    			input.ignore(1);
    			input>>inputdata[i].bus;
    			input.ignore(1);
    			input>>inputdata[i].pass;
    			input.ignore(1);
    			input>>inputdata[i].pasv;
    			input.ignore(1);
    			input>>inputdata[i].bike;
    			input.ignore(1);
    			input>>inputdata[i].semi;
    			input.ignore(1);
    			input>>inputdata[i].four;
    			input.ignore(1);
    			input>>inputdata[i].total;
    			input.ignore(1);					
    	}
    }
    
    //Write function - writes all data to disk
    void writeInfo(info data[], int)
    {
    		//open file
    		ofstream outData;
    		outData.open("C:\\info.tb", ios::out);
    
    		if(!outData.fail())
    		{
    			for(int i=0; i<5; i++)
    			{
    				outData << data[i].date << '#'
    						<< data[i].name << '#'
    						<< data[i].booth << '#'
    						<< data[i].truk << '#'
    						<< data[i].bus << '#'
    						<< data[i].pass << '#'
    						<< data[i].pasv << '#'
    						<< data[i].bike << '#'
    						<< data[i].semi << '#'
    						<< data[i].four << '#'
    						<< data[i].total <<endl;
    			}
    			outData.close();
    		}
    		else
    		{
    			cout << "error opening file" << endl;
    		}
    }
    
    //Get Data function - prompts user for their input data
    void getInfo(info data[], int size)
    {
    	
    	int num = 0;//booth number entered by user
    	char count[5];//stores input for vehic count
    	float charge = 0;//charge amount entered by user
    	double bthTotal = 0;//total correct charges of booth
    	int b = 0;//vehic count converted to int
    	char idate[30], name[30];//date and name input
    	char contin = 'Y';//loop control
    	char addMore = 'Y';//loop control
    	char vehic;//vehic type
    	char ok = 'Y';//loop control
    	char totalTest[10];//stores test input for 
    	char ch = 'N';//loop control
    
    	cout << endl << endl << endl;
    
    	//gets todays date
    	checkstring(idate, "Please enter todays date: "); //send question and variable to error-checking function
    	cout << endl;
    
    	//gets the name of the operator
    	checkstring(name, "Please enter your name: "); //send question and variable to error-checking function
    	cout << endl;
    
    	//copies the date and operator to each booth
    	for (int i=0; i<5;i++)
    	{
    		strcpy(data[i].date, idate);
    				
    		strcpy(data[i].name, name);
    	}
    
    	do{	
    		char sel[1];
    
    		//gets first booth number  
    		cout<<"Please enter the booth number [1-5] : ";
    		cin.ignore(100,'\n');
    		cin>>sel;
    
    		int a = atoi(sel);
    		num = a;
    		
    			//Checks for valid integer
    			while ((a<1)||(a>5))
    			
    			{	cout<<endl;			
    				cout<<"Please enter a valid integer [1-5] :"<<endl<<endl;
    				cout<<"Booth Number -> ";
    				cin.ignore(100,'\n');
    				cin>>sel;
    
    				a=atoi(sel);
    				num = a;
    			}
    		
    			cout<<endl<<endl;
    
    			data[num-1].booth = num;
    
    		//displays vehicle types
    		do{
    			
    			cout<<"	ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ VEHICLE TYPES ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ"<<endl;
    			cout<<"        Û TYPE                                 CHARGE  Û"<<endl;
    			cout<<"        Û                                              Û"<<endl;
    			cout<<"        Û                                              Û"<<endl;
    			cout<<"        Û M = Motorbike      ..... ..... ..... [$1:20] Û"<<endl;
    			cout<<"        Û P = Passenger Vehicle    ..... ..... [$2:20] Û"<<endl;
    			cout<<"        Û U = Pass.Vehicle + Trailer (ute)     [$2:40] Û"<<endl;
    			cout<<"        Û F = 4 Wheeled Drive      ..... ..... [$2:50] Û"<<endl;
    			cout<<"        Û B = Bus      ..... ..... ..... ..... [$4:20] Û"<<endl;
    			cout<<"        Û T = Truck    ..... ..... ..... ..... [$5:00] Û"<<endl;
    			cout<<"        Û S = Semi Trailer   ..... ..... ..... [$6:20] Û"<<endl;
    			cout<<"        Û                                              Û"<<endl;
    			cout<<"        Û X = Exit Data Entry                          Û"<<endl;
    			cout<<"        Û                                              Û"<<endl;
    			cout<<"	ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ"<<endl<<endl;
    			
    			do{
    
    				//prompt for vehicle type	
    				cout<<endl<<endl;
    				cout<<data[num-1].name;
    				cout<<", please enter your vehicle type : ";
    				cin.ignore(100,'\n');
    				cin>>vehic;
    				vehic = toupper(vehic);
    				
    				cout<<endl;
    				
    				//check type is valid
    				if((vehic !='T')&&(vehic !='B')&&(vehic !='F')
    					&&(vehic !='P')&&(vehic !='M')&&(vehic !='S')
    					&&(vehic !='U')&&(vehic !='X'))
    				{
    					cout<<"Invalid vehicle type"<<endl;
    					ok = 'N';
    				}
    				else
    				{
    					ok = 'Y';
    				}
    
    			}while(ok != 'Y');
    
    			
    			switch(vehic)
    				{
    				
    				case 'T':
    
    					if(data[num-1].truk<2000)
    					{
    						//prompts for number of vehicle
    						do{			
    							cout << "Please enter the number of Trucks [1 - 2000] :";
    							
    							cin.ignore(100,'\n');
    							cin >> count;
    
    							b = atoi(count);//converts to int
    							cout << endl;
    
    							VehicleInput(count, b);
    							
    						}while(ok != 'Y');
    
    						//checks if total in booth will add beyond 2000
    						if((data[num-1].truk + b)<2001)
    						{
    							data[num-1].truk = data[num-1].truk + b;
    						}
    						else
    						{
    							cout << "Cannot add that many trucks" << endl << endl;
    							cout << "A maximum of 2000 trucks can be added" << endl << endl;
    							menu(data, 5);
    						}
    					}
    					//if total entered is above 2000 - error message					
    					else
    					{
    						cout << " The total number of trucks exceeds 2000, no more trucks can be added to this booth." << endl << endl;
    						menu(data, 5);
    					}
    
    				break;
    
    					
    				case 'B':
    
    					if(data[num-1].bus<2000)
    					{
    
    						do{
    							
    							cout << "Please enter the number of Buses [1 - 2000] :";
    							cin.ignore(100,'\n');
    							cin >> count;
    							b = atoi(count);
    							cout << endl;
    
    							VehicleInput(count, b);
    							
    						}while(ok != 'Y');
    
    						if((data[num-1].bus + b)<2001)
    						{
    							data[num-1].bus = data[num-1].bus + b;
    						}
    						else
    						{
    							cout << "Cannot add that many buses" << endl << endl;
    							cout << "A maximum of 2000 buses can be entered" << endl << endl;
    							menu(data, 5);
    						}
    				
    					}
    					else
    					{
    						cout << "The total number of buses exceeds 2000, no more buses can be added to this booth." << endl << endl;
    						menu(data, 5);
    					}
    					
    				break;
    
    				case 'F':
    
    					if(data[num-1].four<2000)
    					{
    
    						do{
    							
    							cout << "Please enter the number of 4 wheeled drives [1 - 2000] :";
    							cin.ignore(100,'\n');
    							cin >> count;
    							b = atoi(count);
    							cout << endl;
    
    							VehicleInput(count, b);
    							
    						}while(ok != 'Y');
    
    						if((data[num-1].four + b)<2001)
    						{
    							data[num-1].four = data[num-1].four + b;
    						}
    						else
    						{
    							cout << "Cannot add that many 4 wheeled drives"<<endl<<endl;
    							cout << "A maximum of 2000 4 wheeled drives can be entered"<<endl<<endl;
    							menu(data, 5);
    						}
    				
    					}
    					else
    					{
    						cout << "Total number of 4 wheeled drives exceeds 2000, No more 4 wheeled drives can be added to this booth." << endl << endl;
    						menu(data, 5);
    					}
    					
    				break;
    
    				case 'P':
    
    					if(data[num-1].pass<2000)
    					{
    						do{
    							
    							cout << "Please enter the number of Passenger vehicles [1 - 2000] :";
    							cin.ignore(100,'\n');
    							cin>>count;
    							b = atoi(count);
    							cout<<endl;
    
    							VehicleInput(count, b);
    							
    						}while(ok != 'Y');
    
    						if((data[num-1].pass + b)<2001)
    						{
    							data[num-1].pass = data[num-1].pass + b;
    						}
    						else
    						{
    							cout << "Cannot add that many passenger vehicles" << endl;
    							cout << "A maximum of 2000 passenger vehicles can be entered" << endl << endl;
    							menu(data, 5);
    						}
    				
    					}
    					else
    					{
    						cout << "Total number of passenger vehicles exceeds 2000, No more passenger vehicles can be added to this booth." << endl << endl;
    						menu(data, 5);
    					}
    					
    				break;
    
    				case 'M':
    
    					if(data[num-1].bike<2000)
    					{
    						do{	
    							cout << "Please enter the number of Motorbikes [1 - 2000] :";
    							cin.ignore(100,'\n');
    							cin >> count;
    							b = atoi(count);
    							cout << endl;
    
    							VehicleInput(count, b);
    							
    						}while(ok != 'Y');
    
    						if((data[num-1].bike + b)<2001)
    						{
    							data[num-1].bike = data[num-1].bike + b;
    						}
    						else
    						{
    							cout << "Cannot add that many motorbikes" << endl << endl;
    							cout << "A maximum of 2000 motorbikes can be entered" << endl << endl;
    							menu(data, 5);
    						}
    				
    					}
    					else
    					{
    						cout << "Total number of motorbikes exceeds 2000, No more motorbikes can be added to this booth." << endl << endl;
    						menu(data, 5);
    					}
    					
    				break;
    
    				case 'S':
    
    					if(data[num-1].semi<2000)
    					{
    
    						do{
    							cout << "Please enter the number of Semi Trailers [1 - 2000] :";
    							cin.ignore(100,'\n');
    							cin >> count;
    							b = atoi(count);
    							cout << endl;
    
    							VehicleInput(count, b);							
    
    						}while(ok != 'Y');
    
    						if((data[num-1].semi + b)<2001)
    						{
    							data[num-1].semi = data[num-1].semi + b;
    						}
    						else
    						{
    							cout << "Cannot add that many semi trailers" << endl << endl;
    							cout << "A maximum of 2000 semi trailers can be entered" << endl << endl;
    							menu(data, 5);
    						}
    
    					}
    					else
    					{
    						cout << "Total number of semi trailers exceeds 2000, No more semi trailers can be added to this booth." << endl << endl;
    						menu(data, 5);
    					}
    					
    				break;
    
    				case 'u': case 'U':
    					
    					if(data[num-1].pasv<2000)
    					{
    
    						do{
    							cout << "Please enter the number of Passenger Vehicles with Trailers [1 - 2000] :";
    							cin.ignore(100,'\n');
    							cin >> count;
    							b = atoi(count);
    							cout << endl;
    
    							VehicleInput(count, b);
    							
    						}while(ok != 'Y');
    
    						
    						if((data[num-1].pasv + b)<2001)
    						{
    							data[num-1].pasv = data[num-1].pasv + b;
    						}
    						else
    						{
    							cout << "Cannot add that many passenger vehicles with trailers" << endl << endl;
    							cout << "A maximum of 2000 passenger vehicles with trailers can be entered"<< endl << endl;
    							menu(data, 5);
    						}
    
    				
    					}
    					else
    					{
    						cout << "Total number of passenger vehicles with trailers exceeds 2000, No more passenger vehicles with trailers can be added to this booth." << endl << endl;
    						menu(data, 5);
    					}
    							
    				break;
    
    				case 'x': case 'X':
    
    					menu(data, 5);
    	
    				break;
    
    				//default should never be accessed
    				default:
    
    					cout << "An error has occured." << endl << endl;
    					menu(data, 5);
    					
    			}
    								
    			//prompt user for choice
    			do
    			{
    				cout << endl << endl;
    				cout << "Do you wish to add another type of vehicle to this booth? [Y / N] : ";
    				cin.ignore(100,'\n');
    				cin >> ch;
    				ch = toupper (ch);
    
    				//check input			
    				if((ch !='Y')&&(ch !='N'))
    				{
    					cout << endl << endl;
    					cout << "Invalid input " << endl;
    					ok = 'N';
    				}
    				else
    				{
    					ok = 'Y';
    					cout << endl << endl << endl;
    				}
    
    			}while(ok != 'Y');
    		
    
    		}while(ch == 'Y');
    	
    		//Prompts for amount taken at this booth					
    		cout << "Please enter the total amount taken for this booth :";
    		cin.ignore(100,'\n');
    		cin >> totalTest;
    
    		double c = atof(totalTest);
    			
    		//Checks for valid integer
    		while (c<=0)
    			
    		{	cout << endl;			
    			cout << "Please enter a valid integer." << endl << endl;
    			cout << "Amount -> ";
    			cin.ignore(100,'\n');
    			cin >> totalTest;
    			c=atof(totalTest);
    		}
    
    		//put total taken into booth total
    		data[num-1].total = c;
    
    		//calculate correct total for the booth		
    		bthTotal = (data[num-1].bus * 4.20)+(data[num-1].truk * 5.50)
    			+(data[num-1].pass * 2.20)+(data[num-1].pasv * 2.40)
    			+(data[num-1].bike * 1.20)+(data[num-1].semi * 6.20)
    			+(data[num-1].four * 2.50);
    
    		//display message stating whether charges are correct
    		if(bthTotal==data[num-1].total)
    		{
    			cout << endl << endl << endl;
    			cout<<'\t'<<'\t'<<"-  CORRECT CHARGES  -"<<endl<<endl;
    		}
    		else
    		{
    			cout << endl << endl << endl;
    			cout<<'\t'<<'\t'<<"        -  INCORRECT CHARGES  - "<<endl<<endl;
    			cout<<setiosflags(ios::fixed | ios::showpoint);
    			//set to 2 decimal places
    			cout << setprecision(2);
    			cout<<'\t'<<'\t'<<"The correct charges for this booth are : $" << bthTotal << endl << endl << endl;
    		}
    
    		//prompt user - add vehicles to another booth
    		do
    		{
    			cout << endl << endl;
    
    			cout << "Do you wish to add information to another booth? [Y / N] : ";
    			cin.ignore(100,'\n');
    			cin >> addMore;
    			addMore = toupper (addMore);
    			cout << endl << endl;
    						
    			//check input
    			if((addMore !='Y')&&(addMore !='N'))
    			{
    				cout << endl << endl;
    				cout << "Invalid input " << endl << endl;
    				
    				ok = 'N';
    			}
    			else
    			{
    				ok = 'Y';
    			}
    		
    		}while(ok != 'Y');
    
    	}while(addMore == 'Y');
    
    	//return to main
    	menu(data, 5);
    		
    }
    
    //Menu function - to display menu for user to select from
    void menu(info data[], int size)
    {
    	char sel[1];
    	int b = 0;
    
    	cout << endl << endl;
    	cout << "                          Toll Booth Magic: Main Menu" << endl;
    	cout << endl;
    	cout << "                 ßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛß" << endl;
    	cout << "                  Û²°                                       °²Û " << endl;
    	cout << "                  Û°                                         °Û " << endl;
    	cout << "                  Û         Please Select an Option:          Û " << endl;
    	cout << "                  Û-------------------------------------------Û " << endl;
    	cout << "                  Û          1.	Enter Booth Data              Û " << endl;
    	cout << "                  Û          2.	View Booth Report             Û " << endl;
    	cout << "                  Û          3.	Exit Program                  Û " << endl;
    	cout << "                  Û                                           Û " << endl;
    	cout << "                  Û°                                         °Û " << endl;
    	cout << "                  Û²°                                       °²Û " << endl;
    	cout << "                 ÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜ" << endl;
    
    		cout << '\t' << '\t' << "Your Selection -> ";
    		cin>>sel;
    		b = atoi(sel);
    
    		do{			
    			//Checks for valid integer
    			if(b<=0)
    			
    			{	cout<<endl;			
    				cout<<'\t'<<'\t'<<"Please enter a valid integer [1 - 3]."<<endl<<endl;
    				cout<<'\t'<<'\t'<<"Your Choice -> ";
    				
    				cin>>sel;
    				b=atoi(sel);
    			}
    			else
    			{
    				if((b!=1)&&(b!=2)&&(b!=3))
    				{
    					cout<<endl;			
    					cout<<'\t'<<'\t'<<"Please enter a valid integer [1 - 3]."<<endl<<endl;
    					cout<<'\t'<<'\t'<<"Your Choice -> ";
    					
    					cin>>sel;
    					b=atoi(sel);
    				}
    			}
    		}while((b!=1)&&(b!=2)&&(b!=3));
    			
    			if(b == 1)
    			{
    				getInfo(data, 5);
    			}
    			else
    				if(b == 2)
    				{
    					getReport(data, 5);
    				}
    				else
    					if(b == 3)
    					{
    						exit();
    					}
    					
    					cout << endl;
    }
    
    //Report function - displays report to screen, 
    
    void getReport(info data[], int size)
    {
    	int i = 0;//loop control
    
    	char choice = 'Y';//loop control
    
    	int totalvehic = 0;//total vehicle count
    
    	double expectedCharges = 0;//correct charges for booths
    
    	//stores totals of all booths
    	double chargesT = 0; 
    	double chargesB = 0; 
    	double chargesM = 0;
    	double chargesP = 0;
    	double chargesU = 0;
    	double chargesS = 0;
    	double chargesF = 0;
    	
    	int totaltruk = 0;
    	int totalbus = 0;
    	int totalpass = 0;
    	int totalpasv = 0;
    	int totalbike = 0;
    	int totalsemi = 0;
    	int totalfour = 0;
    	double receivedCharges = 0;
    
    			//calculates the totals
    			for(i=0;i<5;i++)
    			{
    
    			expectedCharges = 0;
    			
    			chargesT = chargesT +(data[i].truk * 5.00);
    			expectedCharges = chargesT + expectedCharges;
    
    			chargesB = chargesB +(data[i].bus * 4.20);
    			expectedCharges = chargesB + expectedCharges;
    			
    			chargesP = chargesP +(data[i].pass * 2.20);
    			expectedCharges = chargesP + expectedCharges;
    
    			chargesU = chargesU +(data[i].pasv * 2.40);
    			expectedCharges = chargesU + expectedCharges;
    
    			chargesM = chargesM +(data[i].bike * 1.20);
    			expectedCharges = chargesM + expectedCharges;
    
    			chargesS = chargesS +(data[i].semi * 6.20);
    			expectedCharges = chargesS + expectedCharges;
    
    			chargesF = chargesF +(data[i].four * 2.50);
    			expectedCharges = chargesF + expectedCharges;
    				 
    			 totaltruk = totaltruk + data[i].truk;
    			 totalbus = totalbus + data[i].bus;
    			 totalpass = totalpass + data[i].pass;
    			 totalpasv = totalpasv + data[i].pasv;
    			 totalbike = totalbike + data[i].bike;
    			 totalsemi = totalsemi + data[i].semi;
    			 totalfour = totalfour + data[i].four;
    
    			 receivedCharges = receivedCharges + data[i].total;
    
    			}
    
    			//total count of vehicles
    			totalvehic = (totalbike + totalpass + totalpasv + totalfour + totaltruk + totalbus + totalsemi);
    			
    			//total count of correct charges
    			expectedCharges = ((totalbike * 1.2) + (totalpass * 2.2) + (totalpasv * 2.4) + (totalfour * 2.5) + (totaltruk * 5.5) + (totalbus * 4.2) + (totalsemi * 6.2));
    
    			double diff = (receivedCharges - expectedCharges);
    
    					//displays report
    					cout << "ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ" << endl;
    					cout << "ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ²²²°°°° FINAL REPORT °°°°²²²ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ" << endl;
    					cout << "Ûßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß" << endl;
    					cout << "Û Date: " << data[1].date << ", Operator: " << data[1].name << endl; 
    					cout << "Û                                                                   " << endl;
    					cout << "Û TOTAL VEHICLES °°°²²ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ" << endl;
    					cout << "Û                                                                  Û" << endl;                              
    					cout << "Û                                   Totals       Money  Expected   Û" << endl;
    					cout << "Û                                   °²ÛÛ²°       °°°²²²ÛÛÛ²²²°°°   Û" << endl; 
    					cout << "Û Total Motorbikes:          " << setw(12) << totalbike << setw(17) << chargesM << setw(10) << "Û" << endl;
    					cout << "Û Total Passenger vehicles:  " << setw(12) << totalpass << setw(17) << chargesP << setw(10) << "Û" << endl;
    					cout << "Û Total Pass. with Trailers: " << setw(12) << totalpasv << setw(17) << chargesU << setw(10) << "Û" << endl;
    					cout << "Û Total Four Wheeled Drives: " << setw(12) << totalfour << setw(17) << chargesF << setw(10) << "Û" << endl;
    					cout << "Û Total Trucks:              " << setw(12) << totaltruk << setw(17) << chargesT << setw(10) << "Û" << endl;
    					cout << "Û Total Buses:               " << setw(12) << totalbus << setw(17) << chargesB << setw(10) << "Û" << endl;
    					cout << "Û Total Semi Trailers:       " << setw(12) << totalsemi << setw(17) << chargesS << setw(10) << "Û" << endl;
    					cout << "Û__________________________________________________________________Û" << endl;
    					cout << "Û BOOTH TOTALS                                             Totals  Û" << endl;
    					cout << "Û                                                                  Û" << endl;
    					cout << "Û Total Number of Vehicles:                             " << setw(9) << totalvehic << setw(3) << "Û" << endl;
    					cout << "Û Total Charges Received for all Vehicles:              " << setw(9) << receivedCharges << setw(3) << "Û" << endl;
    					cout << "Û Total Charges Expected for all Vehicles:              " << setw(9) << expectedCharges << setw(3) << "Û" << endl;
    					cout << "Û Surp/Def:                                             " << setw(9) << diff << setw(3) << "Û" << endl;
    					cout << "ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß" << endl;
    
    					//prompts user to leave report screen
    					do{					
    						cout << "Exit report [Y / N] : ";
    						cin.ignore(100,'\n');
    						cin >> choice;
    						choice = toupper(choice);
    						
    							//checks input
    							while((choice!='Y')&&(choice!='N'))
    							{	
    								cout << endl << endl;
    								cout << "An invalid entry has been made." << endl;
    								cout << "Please enter your choice again." << endl;
    								cout << "Exit report [Y / N] : ";
    								cin.ignore(100,'\n');
    								cin >> choice;
    								choice = toupper(choice);
    								cout << endl << endl;
    							}
    							if(choice == 'N')
    							{ 
    								cout << endl;
    							}
    					}while(choice !='Y');
    
    				//returns to main	
    				menu(data, 5);
    }
    					
    //Exit function - quits "Toll Booth Magic"
    void exit()
    {
    	cout << endl;
    	cout << "Closing Toll Booth Magic" << endl;
    }
    
    //Vehicle Entry Validation Function
    int VehicleInput(char* count, int& b)
    {
    	char ok = 'Y';//loop control
    
    	b = atoi(count);//converts to int
    	cout << endl;
    
    	while((b > 2000)||(b <= 0))
    	{
    		ok = 'N';
    	
    		cout << "An invalid entry has been made." << endl << endl;
    		cout << "Number [1 - 2000] -> ";
    		cin.ignore(100,'\n');
    		cin >> count;
    		b=atoi(count);
    		cout << endl;
    								
    	}
    	ok = 'Y'; 
    	return b;
    }
    
    char* checkstring(char* working, char* question) //function to check that string input is valid
    {
    	int check = 0; //control
    	
    	cout << question; //outputs question
    	cin.ignore(100,'\n');
    	cin >> working;
    
    	while (check == 0)
    	{
    		string sData = working; //sets string to work with from working
    
    		int nStringLength = sData.length( ); //sets nStringlenght to the lendth of sData
    
    		if ((nStringLength < 4) || (nStringLength >= 30)) //error checking
    		{
    			check = 0;
    			cout << "Invalid input. " << question << endl;
    
    			cin.ignore(100,'\n');
    			cin >> working;
    			
    			cout << endl;
    		}
    		else
    		{
    			check = 1;
    			return working; //returns valid string
    		}
    	}
    	
    	check = 1;
    	return working; //this should never be reached as check is initialised to 0
    }
    If someone can tell me what is causing this, I will love you forever. I am already extremely grateful for what this board has helped me with so far.
    Go you big red fire engine!

  2. #2
    Registered User
    Join Date
    Aug 2001
    Posts
    72
    Hi

    pass the input stream argument by reference

    >> void fillArray(ifstream&, info[], int);

    this should improve the situation.

  3. #3
    Registered User
    Join Date
    Sep 2001
    Posts
    10
    Thankyou very much damyan - that has solved the problem.
    Go you big red fire engine!

  4. #4
    Skunkmeister Stoned_Coder's Avatar
    Join Date
    Aug 2001
    Posts
    2,572
    Zaarin just for your future information enclose code in the code tags and for things of that size add them as attachments so we can download then and run it through a compiler. This board provides some very useful tools..... USE THEM!
    Free the weed!! Class B to class C is not good enough!!
    And the FAQ is here :- http://faq.cprogramming.com/cgi-bin/smartfaq.cgi

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Quantum Random Bit Generator
    By shawnt in forum C++ Programming
    Replies: 62
    Last Post: 06-18-2008, 10:17 AM
  2. We Got _DEBUG Errors
    By Tonto in forum Windows Programming
    Replies: 5
    Last Post: 12-22-2006, 05:45 PM
  3. Dikumud
    By maxorator in forum C++ Programming
    Replies: 1
    Last Post: 10-01-2005, 06:39 AM
  4. Please Help - Problem with Compilers
    By toonlover in forum C++ Programming
    Replies: 5
    Last Post: 07-23-2005, 10:03 AM
  5. ras.h errors
    By Trent_Easton in forum Windows Programming
    Replies: 8
    Last Post: 07-15-2005, 10:52 PM