Warum schmiert das Programm beim einlesen aus Dateien ab?
-
Hi!
Im rahmen eines Physikprojekts habe ich ein System simuliert und will nun die ergebnisse die in ca. 50 dateien gespeichert sind in einer zusammenfassen (und während dessen diverse einträge löschen).int main() { char M_string [30]; char P_string [30]; vector<double> M; vector<double> P; for(int M_index=1;M_index<4;M_index=M_index+2) { char dateiname[37]=""; char temp [2]=""; /////Dateinamen erstellen////// strcat(dateiname,"P"); itoa(M_index,temp,10); strcat(dateiname,temp); strcat(dateiname,".txt"); ////////////////////////////// fstream datei; if(datei.good()) cout <<"datei vorhanden"<<endl; getchar(); datei.open(dateiname,ios::in); while(!datei.eof()) { datei.getline(M_string,30,' '); datei.getline(P_string,30,'\n'); M.push_back(atof(M_string)); P.push_back(atof(P_string)); } datei.close(); } }Der Code macht also folgendes. Erst wird ein Dateiname bestimmt. Das geht leicht in der Forschleife da die Dateien nach einem Muster benannt sind. P1.txt, P3.txt, p5.txt usw. Dann hab ich den Dateinamen in einem String, öffne die Datei, geh zeilenweise bis zum ende durch und setze die Werte in die jeweiligen Vectorvariablen. Soweit so gut.
Die erste Datei wird geöffnet und richtig eingelesen. Dann gehts aber zur nächsten, P3.txt.
die Abfrage ob die Datei existiert, liefert auch die Meldung das die Datei da ist. Aber dann schmiert das programm windowstypisch ab. "merge.exe hat ein Problem festgestellt und muss beendet werden". Ich komm grad nicht dahinter warum das so ist. Die Dateien unterscheiden sich nicht voneinander. In jeder stehen nur Zahlen in der gleichen syntax, also zahl1 zahl2.
Was mach ich falsch, oder was hab ich vergessen?
thx.
-
Habs nicht ausprobiert, aber so in etwa sollte es besser gehen, also mit diesen fehleranfälligen char[].
int main() { vector<double> M; vector<double> P; for(int M_index=1;M_index<4;M_index=M_index+2) { /////Dateinamen erstellen////// stringstream dateiname; dateiname<<"P"<<M_index<<".txt"; ////////////////////////////// fstream datei(dateiname.str().c_str(),ios::in); if(datei){ cout <<"datei vorhanden"<<endl; while(!datei.eof()) { double m,p; datei>>m>>p; if(!datei.fail()) { M.push_back(m); P.push_back(p); } } } datei.close(); //muss nicht sein } }
-
Hi!
Danke erstmal.Deine Version macht aber genau das gleiche. Die erste Datei wird eingelesen und in die vectors gepackt, und danach schmiert das programm ab.
Ich nutze als compiler übrigens dev-c++, falls das irgendwie wichtig sein sollte.
-
Jetzt läufts. Hatte fälschlicherweise falsche werte aus den dateien gelöscht und das scheint dem vector wohl irgendwie nicht gefallen zu haben.