Problem beim Arbeiten mit Vektoren
-
Hallo,
ich habe eine Funktion, die ein Textfile, das folgendermaßen aussieht, über einen Vektor auslesen soll.
test.txt: # Kommentare # # a b c d # 12.34 56.78 54.32 43.23 on 32.45 98.65 65.43 43.26 offHier jetzt die Funktion, die die Werte in einen Vektor schreibt. In der main-Funktion soll man dann auf die einzelnen Elemente zugreifen können.
#include <sstream> #include <string> #include <vector> #include <iterator> #include <map> #include <iostream> #include <fstream> using namespace std; bool findvalues(vector<double> &v) { ifstream in("test.txt"); if(in.is_open()) { string line; while(!in.eof()) { getline(in, line); if(!line.empty() && line[0] != '#') { stringstream ss; string onoff; double a, b, c, d; ss << line; ss >> a >> b >> c >> d >> onoff; if(onoff == "on") { v.push_back(a); v.push_back(b); v.push_back(c); v.push_back(d); return true; } } } } in.close(); return false; } int main () { cout<<"1"<<endl; vector <double> v; cout<<"2"<<endl; findvalues(v); cout<<"3"<<endl; double q = v[1]; cout<<"4"<<endl; cout<<q<<endl; cout<<"5"<<endl; return 0; }Wenn ich das Programm ausführe, erfolgt die Ausgabe bis einschließlich 3, danach steht "Segmentation fault". Der Fehler muss also in der Zeile "double q = v[1]" liegen.
Könnt Ihr mir auf die Sprünge helfen, warum das Programm so nicht funktioniert?
Vielen Dank!
-
Bei mir funktioniert's.
Bist du sicher, dass du die richtige Datei einliest? Prüf doch mal nach dem Aufruf von findvalues, wieviele Elemente der vector hat.
-
Ja, also eigentlich hab ich nur diese eine Datei test.txt. Wenn ich die Anzahl der Elemente prüfe, gibt er mir allerdings 0 aus.
-
Und konnte diese Datei auch geöffnet werden? (schau mal nach, ob du überhaupt in den 'if(in.is_open())...' Zweig reingekommen bist)
(PS: Wenn du hast, solltest du einen Debugger verwenden)
-
Ok, hat sich erledigt. Ich hatte in der Datei bei einer Zahl ein Leerzeichen zuviel. Jetzt funktioniert es.
-
Na dann hast du doch dein Problem. Geh mal mit dem Debugger durch und schau nach ob richtig eingelesen wird. Vor dem Ausgeben solltest du auch noch den Rückgabewert von findvalues auswerten.
Ich würde findvalues noch ein wenig umformulieren.bool findvalues(vector<double> &v) { ifstream in("test.txt"); if(!in.is_open()) return false; string line; while(getline(in, line)) { if(!line.empty() && line[0] != '#') { stringstream ss(line); string onoff; double a, b, c, d; ss >> a >> b >> c >> d >> onoff; if(onoff == "on") { v.push_back(a); v.push_back(b); v.push_back(c); v.push_back(d); return true; } } } return false; }[edit]Ein wenig spät.
[edit]