ausgabedaten in einer datei speichern
-
Hallo,
cih habe ein Problem mochte Ausgabe meines Programms in einer Datei speichern.
Es klappt, aber anstatt mehrere Werte wird nur eine einzige erste wert ausgegeben. Hier ein Ausschnit aus meinem Programm.double f(std::vector<Point> p) { std::vector<double> result; std::vector<Point> temp; std::vector<int> segs = segments(p); for(int i = 0; i < (int)segs.size() - 1; i++) { for(int j = segs[i]; j < segs[i+1]; j++) { temp.push_back(points[j]); } result[i] = f1(temp); cout << " \t" << i << "\t" << f1(temp) << '\n'; } return result; }
wenn ich diese funktion Aufrufe werden drei werte ausgegeben, aber nur eine wird in meiner Datei gespeichert. Hoffentlich kann mir jemand helfen.
Ich danke euch im Voraus.
-
In welche Datei?! Ich sehe hier keine Datei Operationen..
Was ist f1 und was ist segments?Im übrigen sieht die Bedinung:
i < segs.size() - 1;
falsch aus. Üblicherweise will man alle Elemente in einem vector, was dan aber so aussieht:
i < segs.size();
Dann sollte der Typ von i angepasst werden, dass der Cast nicht nötig ist, um Warnungen zu unterdrücken..
So sieht die Ausgabe in eine Datei üblicherweise aus:
#include <fstream> int main () { int val1 = 2; int val2 = 5; std::ofstream out ("test.txt"); out << "wert 1: " << val1 << std::endl; out << "wert 2: " << val2 << std::endl; //... }
-
fi und segments sind funktionen, segments hat die punktfolge als elemnte und vektor als rückgabewert.
ich möchte nicht alle elmente in diesem vektor, deswegen
i < segs.size() - 1;
.
meine Code :#include <fstream> int main () { std::ofstream out; out.open("test.txt"); out << f(p) << '\n'; out.close(); } double f(std::vector<Point> p) { double result; std::vector<Point> temp; std::vector<int> segs = segments(p); for(int i = 0; i < (int)segs.size() - 1; i++) { for(int j = segs[i]; j < segs[i+1]; j++) { temp.push_back(points[j]); } result = f1(temp); cout << " \t" << i << "\t" << f1(temp) << '\n'; } return result; }
-
Klar wird nur ein Wert in die Datei geschrieben. Eine Funktion hat ja nur einen Rückgabewert. Mach die Ausgabe doch innerhalb der Funktion und ansonsten brauchst du als Rückgabewert einen Container und dann musst du diesen Container durchgehen und ausgeben..
-
ich habe versucht mein Problem zu lösen, indem ich als Rückgabewert Vektor nehme. aber kommt Fehlermeldung, dass " Überladene Funktion unterscheidet sich nur hinsichtlich des Rückgabetyps von 'double segment_dimension(std::vector<_Ty>)'"
std::vector<double> f(std::vector<Point> p) { std::vector<double> result; std::vector<Point> temp; std::vector<int> segs = segments(p); for(int i = 0; i < (int)segs.size() - 1; i++) { for(int j = segs[i]; j < segs[i+1]; j++) { temp.push_back(points[j]); } double r = f1(temp); result.push_back(r); cout << " \t" << i << "\t" << f1(temp) << '\n'; } return result; }
-
Du musst den Prototypen auch noch anpassen.. also vor der main hast du ja noch irgendwo sowas stehen:
double f(std::vector<Point> p) int main (){..}
Da musst du den Rückgabewert auch noch anpassen..
-
mio schrieb:
ich habe versucht mein Problem zu lösen, indem ich als Rückgabewert Vektor nehme. aber kommt Fehlermeldung, dass " Überladene Funktion unterscheidet sich nur hinsichtlich des Rückgabetyps von 'double f(std::vector<_Ty>)'"
std::vector<double> f(std::vector<Point> p) { std::vector<double> result; std::vector<Point> temp; std::vector<int> segs = segments(p); for(int i = 0; i < (int)segs.size() - 1; i++) { for(int j = segs[i]; j < segs[i+1]; j++) { temp.push_back(points[j]); } double r = f1(temp); result.push_back(r); cout << " \t" << i << "\t" << f1(temp) << '\n'; } return result; }
-
drakon, ich danke dir! wie konnte ich das übersehen...
-
In dem Code kommen etwas viele unnötige Kopien vor. Versuche, wenn möglich mit Const-Referenzen statt mit Value-Parametern zu arbeiten.
Zum Beispiel:
std::vector<double> f(const std::vector<Point>& p)