Con la speranza che qualcuno mi risponda...
Ho praticamente terminato il codice, c'e' solo un'imperfezione: come ultimo valore, anziche' leggere la coordinata y corrispondente all'ultimo nodo, mi restituisce automaticamente uno 0.![]()
Qualcuno riesce a capire a cosa e' dovuto?
codice:#include <iostream> #include <fstream> #include <string> #include <sstream> #include <cstdlib> #include <cctype> // gestione dei caratteri isalnum() using namespace std; int node_num; // number of nodes float *cord_x = NULL; float *cord_y = NULL; void ReadMatrix( string FileIn ) { // open file ifstream in( FileIn.c_str() ); if( !in ) { cerr << "Could not open file: " << FileIn << endl; exit( 1 ); } // read the number of nodes string line; stringstream ss; string token; while( getline(in, line) ) { ss << line; } while( ss >> token ) { if( token.find("DIMENSION") != string::npos ) { ss >> node_num; cout << "node num:" << node_num << endl; } if( token.find("NODE_COORD_SECTION") != string::npos ){ break; } } cord_x = (float*) malloc ( node_num * sizeof(float) ); cord_y = (float*) malloc ( node_num * sizeof(float) ); int index; float x, y; // read the coordinates for( int i =0; i<node_num; i++ ) { ss >> index >> x >> y; cord_x[index-1] = x; cord_y[index-1] = y; // cout << index << " " << x << " " << y << endl; /* in questo punto, se stampo l'operazione appena fatta, mi * restituisce correttamente tutti i nodi con le relative coordinate. * Per quanto riguarda l'ultimo nodo invece, il valore relativo a * cord_x e' corretto, mentre il valore relativo a cord_y (ultimo * valore prima di EOF) e' inspiegabilmente 0. */ } in.close(); } void WriteMatrix( string FileOut) { ofstream out( FileOut.c_str() ); if( !out ) { cerr << "Could not open file: " << FileOut << endl; exit( 1 ); } //out << "NODE \tCORD_x \t CORD_Y\t\n"; for(int i=0; i<node_num; i++) { out << (i+1) << " \t" << cord_x[i] << " \t" << cord_y[i] << endl; } out.close(); } int main( int argc, char *argv[]) { string FileIn, FileOut; cout << "File name: " ; // per immettere il nome cin >> FileIn; // del file da aprire cout << endl; // direttamente da tastiera /*if ( argc < 2 ) { FileIn = "TESTIN"; FileOut = "TESTOUT"; } else if ( argc < 3 ) { */ FileOut = FileIn; FileOut.erase( FileOut.size() - 4, FileOut.size() ); FileOut += ".OUT"; // } ReadMatrix(FileIn); WriteMatrix(FileOut); free(cord_x); free(cord_y); // delete(cord_x); // delete(cord_y); }

Rispondi quotando