I'm new to C++ but i've been programming in other languages for years...
I've slowly going through the tutorials here and building a very basic application based on what I learn each time. At this point, the user runs the program from a command prompt and passes the name of an existing txt file like (myprogram.exe lab1.txt). Then, all user interaction is logged to that txt file. So far, all of the code works.
I'm trying to add a linked list to store a list of Lab names and then print then out. My next step is to validate against it - but i'm not quite there.
With the code listed below, the program runs but shows no sign that the StoreLabList process has run. I've noticed that it's the only time I've had to use using namespace std and also tried to use cout. I've searched and found a fix of "using std:cout;" but that's not doing it. One of the first pieces of this function is spit out "cout<< "Lab Names\n";" but it's not happening and neither are my lab names being printed. yet the program appears to run through the code. I think it has to do with the namespaces but as I'm new to this...help.
the code:
Code:#include <iostream.h> #include <stdlib.h> #include <string.h> #include <fstream> //------------------------------------------------------------ struct workdetails { char labname[12]; int accesslevel; int toxincheck; int prioritylevel; }; struct node { char labname[10]; node *next; }; //------------------------------------------------------------ int StoreLabList(); int GetToxicityLevel(); int GetAuthorityLevel(); int GetPriorityLevel(); int PrintAccess(workdetails, char currentfilename[20]); int ValidateGoodFile(char filename[20]); int PrintLabList(); //Scientist class class Scientist { private: int toxin; public: //constructor with initialization list Scientist(int Toxin_Value) : toxin(Toxin_Value) {} //member functions which do something with toxin int GetToxin() //return the value of toxin { return toxin; } void AlterToxin(int Toxin_Value) //set toxin to Toxin_Value { toxin = Toxin_Value; } }; class QA { public: void Good_RestoreToxin(Scientist& worker, int value) { if (worker.GetToxin() != value) worker.AlterToxin(value); //if toxic level different, change back. } }; //Cleaner class class Cleaner { public: void Evil_Altertoxin(Scientist& victim, int value) { victim.AlterToxin(value); } }; //void main() int main ( int argc, char *argv[] ) { char InputLNAME[11]; //LabName int IsotopeVar = 0; //will store correct toxin value int thisisanumber; //input variable int validtoxin = 0; // false char currentfilename[20]; //log file name dependent on parm int validarguments = 0; if ( argc != 2 ) // argc should be 2 for correct execution // We print argv[0] assuming it is the program name { cout<<"usage: "<< argv[0] <<" <filename>\n"; validarguments = 0; } else { // We assume argv[1] is a filename to open if ( ValidateGoodFile(argv[1]) == 0 ) { strcpy (currentfilename, "default.txt"); } else { strcpy (currentfilename, argv[1]); } validarguments = 1; } if ( validarguments == 0 ) { exit(0); } if ( StoreLabList == 0 ) { exit(0); } //assign to struct workdetails LabAccess; cout << "Please enter a lab name: "; cin.getline ( InputLNAME, 11, '\n' ); strcpy (LabAccess.labname, InputLNAME); LabAccess.accesslevel = GetAuthorityLevel(); if ( LabAccess.accesslevel == 0 ) { exit(0); } LabAccess.prioritylevel = GetPriorityLevel(); // loop until valid toxicity level do { thisisanumber = GetToxicityLevel(); if ( thisisanumber < 100 ) { cout<<"Toxic level within range\n"; // Just to show you it works... validtoxin = 1; } else if ( thisisanumber == 100 ) { // I use else just to show an example cout<<"Extreme toxic level. \n"; // Just to show you it works... if (LabAccess.prioritylevel == 5) { validtoxin = 1; } else { cout<<"You do not have an appropriate priority level.\n"; validtoxin = 0; } } else { cout<<"Toxic level incorrect\n"; // Executed if no other statement is } } while (validtoxin == 0); LabAccess.toxincheck = thisisanumber; IsotopeVar = thisisanumber; if (PrintAccess(LabAccess,currentfilename) == 0) { cout <<"Error writing to log.\n";} //create object Dave - instance encapsulation Scientist Dave(IsotopeVar); //create object John Cleaner John; //Dave checks to see if toxin is still unaltered cout << "\nScientist Dave:\n"; if(Dave.GetToxin() == IsotopeVar) cout << "I'm glad nobody messed with my toxin!\n"; else cout << "Oh my god, somebody altered my toxin!\n"; //John attempts to alter toxin cout << "\nEVIL Cleaner John:\nLet's try to alter Dave's toxin!\n"; John.Evil_Altertoxin(Dave, 0); cout << "\nScientist Dave:\n"; if(Dave.GetToxin() == IsotopeVar) cout << "I'm glad nobody messed with my toxin!\n"; else { cout << "Oh my god, somebody altered my toxin!\n"; cout << "\nUseful Intern:"; cout << "\nI'll fix it.\n"; QA Intern; Intern.Good_RestoreToxin(Dave,IsotopeVar); cout << "\nScientist Dave:\n"; if(Dave.GetToxin() == IsotopeVar) cout << "I'm glad someone fixed my toxin!\n"; else cout << "Oh my god, my toxin can't be fixed!\n"; } return 1; //getche(); //just so the program doesnt terminate immediatly } int PrintAccess(workdetails Details, char currentfilename[20]) { using namespace std; ofstream a_file ( currentfilename,ios::app ); //ios::app -- Append to the file //ios::ate -- Set the current position to the end //ios::trunc -- Delete everything in the file //test file if ( !a_file.is_open() ) { return 0; } else { // Safely use the file stream // Outputs to example.txt through a_file a_file << Details.labname<<"-"<<Details.accesslevel<<"-"<<Details.toxincheck<<"- "<<Details.prioritylevel<<"\n"; // Close the file stream explicitly a_file.close(); return 1; } } int ValidateGoodFile(char filename[20]) { using namespace std; ifstream the_file ( filename ); // Always check to see if file opening succeeded if ( !the_file.is_open() ) return 0; else return 1; // the_file is closed implicitly here the_file.close(); } int GetToxicityLevel() { int GTLevel; cout<<"Please enter a toxicity level: "; cin>> GTLevel; cin.ignore(); return GTLevel; } int GetPriorityLevel() { int GPLevel; cout<<"Please enter a priority level: "; cin>> GPLevel; cin.ignore(); return GPLevel; } int GetAuthorityLevel() { int GALevel; cout<<"Please enter your access level: "; cin>> GALevel; cin.ignore(); switch ( GALevel ) { case 1: return 1; break; case 2: return 1; break; case 3: return 1; break; default: return 0; break; } } int StoreLabList() { using namespace std; cout<< "Lab Names\n"; node *root; // This won't change, or we would lose the list in memory node *conductor; // This will point to each node as it traverses the list ifstream the_file ( "lablist.txt" ); // Always check to see if file opening succeeded if ( !the_file.is_open() ){ cout <<"Could not open file\n"; return 0; } else { root = new node; // Sets it to actually point to something root->next = 0; // Otherwise it would not work well strcpy(root->labname,"Other"); conductor = root; char labinput[10]; // the_file.get ( labinput ) returns false if the end of the file // is reached or an error occurs while ( the_file.get ( labinput, 11, '\n' ) ){ conductor->next = new node; // Creates a node at the end of the list conductor = conductor->next; // Points to that node conductor->next = 0; // Prevents it from going any further strcpy(conductor->labname, labinput); } the_file.close(); conductor = root; while ( conductor != NULL ) { cout<< conductor->labname; conductor = conductor->next; } return 1; } }



LinkBack URL
About LinkBacks



gotta love it