Read from text file
| tqa (7) | |||
| #include <list> #include <vector> #include <queue> #include <iostream> #include <fstream> #include <iomanip> #include <string> using namespace std; template <typename DataType> class Digraph { }; //definition of Read() template <typename DataType> void Digraph<DataType>::Read(ifstream & inFile) { VertexInfo vi; //VertexInfo vi; int n, //number of vertices adjacent to some vertex vertex; //the nuber of vertex v.push_back(vi); //garbage 0-th value so indices start with 1,as it //customary for(;;) { inFile>>vi.data; if(inFile.eof()) break; inFile>>n; list<int> adjList; //construct empty list for (int i =1; i <=n; i++) { inFile>>vertex; adjList.push_back(vertex); } vi.adjacencyList=adjList; v.push_back(vi); } } int main() { cout<<"Enter network file: "; string networkFile; cin>>networkFile; ifstream inFile(networkFile.data()); if (!inFile.is_open()) { cerr << "***Cannot Open file " << networkFile<<" ***\n"; exit(-1); } Digraph<string> d; d.Read(inFile); cout<<"The Digraph's " ; d.Print (cout); cout << endl; int start, destination; char response; do { cout<<"Number of Start node? "; cin>>start; cout<<"Number of destination node? "; cin>>destination; vector<int> path = d.ShortestPath(start,destination); cout<<"Shortest path is: \n"; for (int k=0; k<path.size(); k++) { cout<<setw(3)<<path[k]<<' '<<d.Data(path[k])<<endl; cout<<" |\n" " V\n"; } cout<<setw(3)<<destination<<' ' <<d.Data(destination)<<endl; cout<<"More (Y or N)? "; cin>> response; } while (response == 'y' || response == 'Y'); } my problem is the file that I want to use (networkFile) to give the input did not pass to the Read function. is there anything wrong with my code? | |||
| jpeg (117) | |||
| Please post your code using the code tags. It's the # symbol to the right on the format boxes, or just use "[code] *code goes here* [\code]". I'll look at the code and comment if I can figure it out, just wanted to let you know to put it in the tags. | |||
| jpeg (117) | |||
| I'm getting a lot of errors when I try to compile the code. Is there more code for this program? | |||
| guestgulkan (405) | |||
| The class Digraph is empty so a load of errors turn up. | |||
| tqa (7) | |||
here is my full code
i can compile and run this coding, but the output seems to be incorrect..can anyone help me please | |||
| guestgulkan (405) | |||
| Please edit your post - there is a huge blank space after your last line asking for help. I see that you are reading a file where each line is a string followed by an int followed by the required number of ints. I made a file that looks like this: Andy 5 1 3 5 7 9 John 5 2 4 6 8 10 Susan 5 1 2 3 4 5 Jim 5 5 4 3 2 1 Marcia 5 10 8 6 4 2 Marcus 5 9 7 5 3 1 It read that file ok. Of course - I dont know what sort of values the vertex should have in order to make sense - so the shortest path function wouldn't work (program crashes) with my made-up values. maybe if you provide a short example network file of data. | |||
| tqa (7) | |||
| this is the example of networkFile content Alice 2 3 Bob 1 3 Charlie 1 2 can you tell me the compiler that you used? I am using the DevC++ compiler and I have try in Linux Fedora 8. But both can't execute this code. in the previous code my note :
Actually the output seems did not appear. It only appear "Enter network file: " After I have enter the networkFile name, the output did not appear. I think that it cant read my text file. Anyway..million thanks for you concern and help!! | |||
| guestgulkan (405) | |||
| That file setup you have is bad - it is causing an infinite loop with in the read function. The first line with Alice is the problem Acccording to the way you have written the read function this is what is supposed to happen : 1. read a string (Alice). 2. read an integer (2). 3. The integer we read in step 2 tells us how many integers follows. We are expecting 2 integers to follow but you only have 1 integer. So the read function reads 1 integer but when it tries to read the second one it comes up against the string bob which it cannot read as an integer - the filestream is marked failed - so it keeps looping. So change the first line to read something like Alice 2 3 6 and it should be ok. Do uou undertand what I mean?? | |||
| guestgulkan (405) | |||
| By the way - this also has another side effect. because it has failed to read the second vertex of Alice - the infile stream is marked as failed. the variable n has not been changed and will still holds 3 (it's current value). The
will push back Alice 3 3 You will then go back to the start of the endless loop
for(;;)and because the infile stream has failed - no new data will be read from the file so vertexInfo vi will still hold Alice 3 3 which will get push back - back to the top of the loop ......... If you leave this program running it will just fill up with Alice 3 3 and will most likely eventually crash. You need to modify the read function to take file read failures into account (and if so - don't do the push back, possibly dump any previous push backs already done - and exit the read function cleanly) | |||
| tqa (7) | |||
| ok..i have change my text file to something like this Los_Angeles 3 3 4 6 San_Francisco 3 1 3 4 Denver 3 1 2 3 Chicago 2 3 8 Boston 2 4 6 New_york 3 4 7 8 and i have try to edit it like Los_Angeles 3 3 4 6 San_Francisco 3 1 3 4 Denver 3 1 2 3 Chicago 2 3 8 Boston 2 4 6 New_york 3 4 7 8 both gave the same result. And I can't have the Adjacency-List Representation output. My output goes like: Enter network file: networkFile.doc The Digraph's Adjacency-List Representation: Number of Start node? Thanks once again! | |||
| tqa (7) | |||
| fInally I got the output! i just replace the .doc file to .txt file and it works well thanks a bunch for your help and concern!! | |||
This topic is archived - New replies not allowed.
