Problem mit ausgabe bei einer for schleife + vector inhalte
-
Morgen,
ich mal wieder
also ich hab jetzt ein neues probelm aber und zwar folgendes ich hab einen vector erzeugt mit inhalten gefühlt und will die einzelnen inhalte dann in eine datei schreiben das will ich machen indem ich ne if schleife mache die size des vector hochzählt da ich aber ein problem habe mit dem schreiben in die datei wollt ichs mir erstmal ausgeben lassen aber da kommt dann 500000 raus 5 ist size also ich bräuchte dann antwort auf die frage wie ich die werte des vectors erstmal ausgeben lassen kann und dann noch wie ich sie dann reinschreiben kann. in des file schreib ich mit (*m_pStream) << // funkt aber nicht in der scheife und cout funktioniert auch ned mehr seit ich auf des visual studio umgestiegen bin des mach ich jetzt mit printf naja
also wie immer sagen worte nicht sehr viel also hier der code
// Das in der main datei std::vector<Point> points; points.push_back(Point(10,0,0)); points.push_back(Point(30,0,0)); points.push_back(Point(30,20,0)); points.push_back(Point(0,20,0)); points.push_back(Point(10,0,0)); wr.writePoints(points); //ist erst später wichtig //Das ist in meiner VTKWriter.cpp datei void VTKWriter::writePoints(std::vector<Point> vecPoints) { int nPoints = vecPoints.size(); printf("%i", nPoints ); for(int i=0; i< nPoints;i++) { Point p = vecPoints[i]; //gibt 5 aus for (int l=0; l< nPoints; l++) { printf("%i", p ); //gibt aus 00000 }ja also hoffe das ist so gut erklärt und mir kann da jemand weiterhelfen
Danke schonmal
-
Erstens: Es gibt keine "if-Schleife"

Zweitens: Du hast zwei Schleifen. Die erste überschreibt in jeder Runde den Inhalt der Variablen 'p', die zweite gibt nPoints mal den letzten Wert aus, den du in p eingetragen hast.
PS: Was versteckt sich eigentlich hinter einem 'Point'? Und hältst du es wirklich für eine gute Idee, das als int-Wert ausgeben zu können?
-
versuchs mal mit iteratoren!!
for(std::vector<Point>::iterator it= points.begin(); it < points.end(); it++){ it->... //inhalt von Point }
-
OMG bin ich doof
hab mich verschrieben natürlich hab ich keine if schleife das mir jetzt peinlich naja
hmmm also die überschreiben sich also ok dann werd ich das mal ändern
und zu deiner frage wegen point
des ist jetzt so das ich OOP arbeiten soll aber immernoch das selbe wie dieletzt und wenn du dich erinnerst schreibt des ja kordinaten (ok hab ich nie erwähnt aber könnte ersichtlich gewessen sein) die soll ich jetzt als point zu einer klasse machen damit man einfach nur noch point nimmt und nicht mehr alles eingeben muss
hmmm das mit dem überschreiben ist mir immer noch nicht ganz klar
nur zur absicherung
for(int i=0; i< nPoints;i++) //zählt von 0 bis nPoints hoch { Point p = vecPoints[i]; // weist vecPoints[i] p zu printf("%i", p ); // gibt p aus }aber tut sich dann i nicht dauernt verändern bis nPoints erreicht ist also in meinen fall da size ja 5 ist wärs doch dann
vecPoints[0]
vecPoints[1]
vecPoints[2]
vecPoints[3]
vecPoints[4]und da müssten doch dann andere werte drin stehn?
des weitern wäre sicher string sinnvoller oder? als int?
PS:
Wie geb ich den mit printf strings aus?
-
Ja, i verändert sich dauernd, aber während eines Durchlaufs durch den Schleifenrumpf bleibt es konstant (außer du hast es im Rumpf selber verändert). Das bedeutet, in jedem Schleifendurchlauf greifst du auf ein anderes vector-Element zu und gibst dieses dann aus.
(übrigens kannst du das Kopieren weglassen und 'vecPoints[i]' direkt ausgeben)
PS: Für String-Ausgaben (char*) gibt es die Formatkennung %s - aber ist dein Point ein String? (ich würde für die Klasse den operator<< überladen und dann die Punkte mit 'cout<<vecPoints[i];' ausgeben)
-
also Point ist kein string nein war eigentlich nur einfach so gefragt
also ich soll des einladen und dann ausgeben lassen?
und des weitern Point ist mit 3 punkten definiert mit x y z die standartmäßig auf null gesetzt sind
points.push_back(Point(10,0,0)); <------ die 3 punkte
points.push_back(Point(30,0,0));
points.push_back(Point(30,20,0));
points.push_back(Point(0,20,0));
points.push_back(Point(10,0,0));ähm und es sind double werte
(übrigens kannst du das Kopieren weglassen und 'vecPoints[i]' direkt ausgeben) des verteh ich jetzt nicht
'cout<<vecPoints[i];' <--- mag er ned mehr deswegen ja das printf ka warum sagt dann das
// error C2065: 'cout' : undeclared identifier
versteh ich nicht warum
ähm und wie soll ich des dann machen? des mit dem überladen (Beispiel wär nett)
-
GT schrieb:
(übrigens kannst du das Kopieren weglassen und 'vecPoints[i]' direkt ausgeben) des verteh ich jetzt nicht
Anstatt den Inhalt von vecPoint[i] erst in eine neue Variable zu kopieren und dann auszugeben, kannst du vecPoint[i] auch direkt ausgeben:
//umständlich: Point p = vecPoints[i]; print_point(p); //besser: print_point(vecPoints[i]);'cout<<vecPoints[i];' <--- mag er ned mehr deswegen ja das printf ka warum sagt dann das
// error C2065: 'cout' : undeclared identifier
Dafür fehlt vermutlich ein '#include <iostream>'.
ähm und wie soll ich des dann machen? des mit dem überladen (Beispiel wär nett)
Wenn du es nicht zu kompliziert haben willst, kannst du dir erstmal eine eigene Ausgabefunktion schreiben:
void print_point(const Point& p) { printf("%f/%f/%f ",p.x,p.y,p.z); }Besser (weil flexibler) sieht es aus mit einem Ausgabe-Operator:
std::ostream& operator<<(std::ostream& sout,const Point& p) { sout<<p.x<<"/"<<p.y<<"/"<<p.z<<" "; return sout; }Mit diesem Operator kannst du deine Punkte dann über 'cout<<vecPoints[i];' auf den Monitor schreiben.
PS: Und das Zitieren üben wir auch nochmal

-
ahja Zitieren sorry
aber das was du jetzt geschrieben hast das kling für mich schlüssig und nachvollziehbar das werde ich jetzt ausprobiern
Danke
und ich werde mich bessern