ifstream was war der Trenner '\n' oder ' '?
-
Hallo, für mein openGL projekt ist es wichtig zu wissen, ob mein zuletzt eingelesenes Wort mit einer Neuen Zeile endete, oder ob es nur ein leerzeichen war.
Meine Datei enthät mehrere Koordinaten für mein OpenGL projekt, und es ist wichtig zu wissen, ob in der Zeile drei oder vier Koordinaten standen, je nachdem, ob ich nun daraus ein dreieck, oder ein viereck machen soll. Alle koordinaten einlesen hat bisher geklappt, nur weiß mein Programm noch nicht, wie die Punkte verbunden werden sollen.
-
Les doch per getline() Zeilenweise ein und schau wieviel Leerzeichen du findest. Je nachdem legst du die Koordinaten in einer Struktur ab und übergibst der einen Flag/Typ/sonstwas.
-
ja kein schlechter ansatzt, nur wenn ich per getline einlese, dann sind die Zahlen erstmal nichtmehr im ifstream, was dazu führt, dass ich sie da, wo ich sie gespeichert habe erstmal wieder herausbekommen muss. im stringstrem kann ich sie nicht speichern, da funktioniert getline nicht, und ein String ist nicht so sehr geeignet, um Zahlen auszulesen.
-
Hmm?!
std::ifstream data ("blubb"); std::string line; std::getline (data, line); while (data) { std::istringstream si (line); si >> x >> y >> z >> w; if (si) draw_square (x, y, z, w); else draw_triangle (x, y, z); std::getline (data, line); }Man kann den Fehler noch toller anschauen, aber was spricht grundsätzlich dagegen?!
-
ok danke, damit klappt es, ich wusste nicht, dass man aus strings so leichts streams machen kann.
[edit]
nein es klappt nicht, irgendwie bekomme ich völlig andere Zahlen, Zahlen, bei denen in der Ausgabe ein e angegeben wird, damit sie dargestellt werden können, dabei sind uhrsprünglich alle Zahlen irgendwo zwischen -1 und 1. Hab ich irgendwo was falsch gemacht?
So siehts bei mir aus
ifstream datei("./data/Monkey.raw"); if(!datei) cout << "Datei Kaputt" << endl; else{ int i; string line; GLfloat xyz[12]; while(!datei.eof()){ getline (datei, line); istringstream si(line); for (i = 0; si; i++) si >> xyz[0]; --i; //irgendwie war die Zahl immer eins zu groß switch(i){ case 9: //cout << "dreieck" << endl; //glBegin(GL_TRIANGLES); glBegin(GL_POINTS); for (int j = 0; j < 9; j+=3) glVertex3fv(xyz+i); for (int j = 0; j < 9; ++j) cout << xyz[j] << " "; cout << endl; glEnd(); break; case 12: //cout << "viereck" << endl; //glBegin(GL_QUADS); glBegin(GL_POINTS); for (int j = 0; j < 12; j+=3) glVertex3fv(xyz+i); glEnd(); break; case 0: cout << "Ende" << endl; break; default: cout << "unbekannte größe: " << i << endl; } } }
-
damit ich hier auch afmmerksamkeit bekomme mach ich mal den bösen Doppelpost, sry aber sonst befürchte ich die Aufmersamkeit einiger egagirter user zu verlieren

-
Du liest alle Werte in dieselbe Variable ein, xyz[0].
-
jo danke, habs grade gemerkt, und mein Programm funktioniert, ich kann meshes, die ich vorher mit Blender erstellt und auf RAW exportiert habe nun auch in meiner eigenen OpenGL engine darstellen (ich kann noch nichtmal beleuchten, aber modelle einlese whohoo)