Process terminated with status -1073741819 (0 minutes, 6 seconds)
-
#include<string> #include<fstream> using namespace std; int main() { ifstream lesen("eingabe.txt"); ofstream schreiben; string eingabe; string eingabeVect[9]; int temp1 = 0; int temp2 = 0; int j=0; schreiben.open("ausgabe.txt"); while(getline(lesen, eingabe)) { /* while(j<eingabe.size()) { if(eingabe[j]==32) { do { if(eingabe[j+1]==32) { eingabe.erase(j,1); } } while(eingabe[j+1]==32); if(eingabe[j+1]==0) eingabe.erase(j-1,1); } j++; } */ do { eingabe.erase((eingabe.find(" ")),1); } while((eingabe.find(" ")!=string::npos)); for (int i = 0; i < 9; i++) { temp1 = temp2+1; if (temp2 <= eingabe.length()) temp2 = eingabe.find(" ", temp1); if (temp2 > temp1) eingabeVect[i] = eingabe.substr(temp1, temp2-temp1); else eingabeVect[i] = " "; } temp1 = 0; temp2 = 0; schreiben << "Mass " << eingabeVect[1] << " Soll: " << eingabeVect[4] << " +"; schreiben << eingabeVect[5] << "/" << eingabeVect[6] << " Ist: " << eingabeVect[3] << "\n"; } schreiben.close(); lesen.close(); return 0; }Hier bitte

-
Hallo Austrian,
es wundert mich ein wenig, dass Dir noch keiner gesagt hat, dass man in C++ Streamingoperatoren für Klassen und Strukturen überladen kann. Das ist ganz praktisch, man liest eine Struktur ein und gibt sie wieder aus. Wobei das Einlese- und Ausgabe-Format nicht übereinstimmen muss - in Deinem Fall sähe das etwa so aus:
#include <fstream> #include <iostream> #include <iomanip> // setprecision #include <string> struct X { // -- Einlesen // ist soll tol1 tol2 // M Z4.3.1_Z Dist 69.53 70.00 0.10 -0.10 [-0.47 -0.37] friend std::istream& operator>>( std::istream& in, X& x ) { std::string m, dist; if( (in >> m >> x.m_txt >> dist >> x.m_ist >> x.m_soll >> x.m_tol1 >> x.m_tol2).ignore( 9999, '\n' ) ) { if( m != "M" || dist != "Dist" ) in.setstate( std::ios_base::failbit ); } return in; } // -- Schreiben // soll tol1 tol2 ist // Mass Z4.3.1_Z Soll: 70.00 +0.10/-0.10 Ist: 69.53 friend std::ostream& operator<<( std::ostream& out, const X& x ) { return out << "Mass " << x.m_txt << " Soll: " << x.m_soll << " " << std::showpos << x.m_tol1 << "/" << x.m_tol2 << std::noshowpos << " Ist: " << x.m_ist; } private: std::string m_txt; double m_soll, m_tol1, m_tol2, m_ist; }; int main() { using namespace std; ifstream lesen("eingabe.txt"); ofstream schreiben("ausgabe.txt"); schreiben << fixed << setprecision(2); // sorgt dafür, dass alle double mit 2 Nachkommastellen ausgegeben werden for( X x; lesen >> x; ) // Lese bis nichts mehr geht .. schreiben << x << endl; return 0; }so kommt auch das '+'-Zeichen vor den ersten Toleranz-Wert .. so wie Du es in Deinem ersten Beitrag beschrieben hast.
Ich finde das wesentlich übersichtlicher, als das Rumgefrimele mit den Strings.
Gruß
Werner
-
Ich danke dir wirklich von ganzem herzen!!
Nein, ich wusste nicht dass man Streamingoperationen überladen kann.
Um ehrlich zu sein wusste ich bis vor kurzen nicht einmal was streams sind
Ich werde in zukunft sicher öfter hier vorbeischauen, da ein nicht unwesentlicher Teil meiner Ausbildung das Programmieren mit C/C++/Java ist und ich es auch in weiterer Folge verwenden muss. Wie gesagt stehe ich erst am anfang zu cpp (von java erst gar nicht zu reden) und freue mich über jede hilfe und jeden Ratschlag den ich bekommen kann.
PS: Werner, du bist echt toll

Du hast mir und meinem Kollegen (Ferialpraktikum) das Leben echt sehr erleichtert