Problem beim Einlesen von Daten und konvertieren mit Stringstreams
-
Hallo,
ich würde gerne Matrixdaten in eine Datei schreiben und diese anschließend wieder korrekt auslesen. Hab das ganze mal für eine 3x3 Matrix versucht, das Schreiben funktioniert auch soweit, allerdings läuft beim Einlesen danach irgendwas schief.
#include<fstream> #include<iostream> #include<string> #include<sstream> using namespace std; int main() { double Matrix[3][3]; Matrix[0][0] = 1.0; Matrix[0][1] = 2.0; Matrix[0][2] = 3.0; Matrix[1][0] = 4.0; Matrix[1][1] = 5.0; Matrix[1][2] = 6.0; Matrix[2][0] = 7.0; Matrix[2][1] = 8.0; Matrix[2][2] = 9.0; ofstream fout ("Matrix.txt"); for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { fout << i << "\t" << j << "\t" << Matrix[i][j] << endl; } } fout.close(); fin.open("Matrix.txt"); double Matrixread[3][3]; char temp[256]; int i,j; stringstream sst; while(fin.getline(temp,256)) sst << temp; sst >> i; sst >> j; sst >> Matrixread[i][j]; fin.close(); for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { cout << i << "\t" << j << "\t" << Matrixread[i][j] << endl; } } }Die Ausgabe in "Matrix.txt" klappt wunderbar.
Ich vermute ich mache bei den Stringstreams irgendwas falsch, könnt ihr mir helfen?
-
Bei deiner while-Schleife fehlen Klammern.
Warum eigentlich diese umständliche Art des Parsens? Lies die Daten doch direkt aus dem ifstream.
-
uhh, das mit den Klammern ist natürlich böse

Aber auch mit Klammern funktioniert es leider nicht.Wie liest man die Daten denn direkt aus dem ifstream?
-
kaesekuchen86 schrieb:
Wie liest man die Daten denn direkt aus dem ifstream?
Beispielsweise so:
while(fin >> i, fin >> j) fin >> Matrixread[i][j];
-
Super, das hat geklappt, vielen Dank!
Aber genau verstanden warum das jetzt funktioniert hab ich noch nicht

fin liest das erste Wort komplett ein und schreibt es in i, dann liest fin das zweite Wort und schreibt es in j?
Anschließend wird das dritte Wort in Matrixread[i][j] geschrieben (i und j sind ja jetzt bekannt)
Dabei wird automatisch der Typ richtig umgewandelt?
Soweit richtig?
Die Abbruchbedingung für die while-Schleife hab ich absolut nicht verstanden, kannst du die nochmal genauer erläutern?
-
Du kommst auf die Idee mittels Stringstreams zu Parsen aber verstehst die Grundlagen der Streamoperatoren nicht? 
Ich glaube ich sollte dich lieber auf ein Lehrbuch verweisen, anstatt dir eine kurze Erklärung zu geben. Dies sind so grundlegende Techniken, die muss man gründlich verstanden haben.