Datei auf Dateiende prüfen



  • @jbaben Es wäre sinnvoll, dass du verstehst, warum das (so) funktioniert.



  • @DirkB
    Hallo,
    ja das ist natürlich sinnvoll: "fscanf": Rückgabewert von 0 gibt an, dass keine Felder zugewiesen wurden.

    MfG

    Juergen B.



  • @DocShoe
    Hallo,
    das gezeigte Beispiel von Dir funktioniert leider bei mir nicht (kompiliert mit C++ Visual_Studio 2022).
    Die Daten werden nicht in der entsprechenden Datei gespeichert und somit auch nicht angezeigt.

    MfG

    Juergen B.



  • Hast du denn auch die beiden // to do: ... ausprogrammiert?



  • @Th69
    Hallo,
    nein hatte ich nicht.
    Aber wenn ich das auskommentiere (die beiden // entferne) erhalte ich die Meldung:
    "E0020 Der Bezeichner "to" ist nicht definiert"

    MfG

    Juergen B.





  • Wir hatten damals jemanden, der in der Uni (2. Semester) in den Informatik-Hausaufgaben einen Quellcode mit Folgendem (sinngemäß) abgegeben hat:

    // todo: hier musst du noch deinen Namen und deine Matrikelnummer eintragen 
    

    Derjenige bekam damals in der Vorlesung den "P2 Darwin-Award" 🙂



  • @DirkB
    Hallo,

    das ist mir jetzt aber peinlich, das ich so falsch reagiert habe.
    Natürlich weiss ich was eine To-Do-Liste ist, da muss ich wohl total geträumt haben.
    Anderseits bin ich aber davon ausgegangen das Beispiel ist komplett.

    MfG

    Juergen B.



  • @jbaben

    Das Motto ist Hilfe zur Selbsthilfe. Man bekommt hier selten kompletten, lauffähigen Code, vielmehr soll der Fragesteller in die richtige Richtung geschubst werden und sich den Rest dann selbst erarbeiten. Durch Copy & Paste lernt man nix.



  • Hallo,
    ja ist schon ok.
    Hier das komplette Beispiel:

    #include <string>
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    struct MyData
    {
    	public:
    		long LongData = 1;
    		float FloatData = 2.3f;
    		int IntegerData = 4;
    		string StringData = "Test";
    		char CharData = '?';
    
    	MyData() = default;
    };
    
    ostream& operator<<(ostream& os, MyData const& data)
    {
    	// to do: Daten schreiben
    	os << data.LongData << ",'" << data.FloatData << "','" << data.IntegerData << "','" << data.StringData << "'," << data.CharData << endl;
    	return os;
    }
    
    istream& operator>>(istream& is, MyData& data)
    {
    	// to do: Daten lesen
    	is >> data.LongData >> data.FloatData >> data.IntegerData >> data.StringData >> data.CharData;
    	return is;
    }
    
    void write_test(string const& filename)
    {
    	MyData data;
    	ofstream ofs;
    	ofs.open(filename,ios::app);
    	ofs << data;
    	//ofs << data.LongData << endl;
    	ofs.close();
    }
    
    void read_test(string const& filename)
    {
    	MyData data;
    	ifstream ifs;
    	ifs.open(filename,ios::in);
    	ifs >> data;
    	cout << data << endl;
    	ifs.close();
    }
    
    int main()
    {
    	string const filename = "daten";
    	write_test(filename);
    	read_test(filename);
           cout << "Eingabe erwartet";
    	cin.get();
    }
    

    MfG

    Juergen B.



  • Das Einlesen paßt aber nicht 1:1 zu den geschriebenen Daten.
    Initialisiere mal MyData data in Zeile 45 so:

    MyData data = { 0L, 0.f, 0, "", '*'};
    

    Und lass dann das Programm laufen.

    PS: Warum ios:app beim Schreiben der Datei?


Anmelden zum Antworten