Ein- und Ausgabe unterschiedlich



  • Hallo,

    wieso bekomme ich nicht die gleichen Werte zurückgeliefert, wenn ich die Datei wieder lese?

    #include <fstream>
    #include <iostream>
    
    using namespace std;
    
    int main() {
    	int i = 777;
    	float f = 7.77;
    	char x = 'S';
    	ofstream fout; //Dateiausgabestromobjekt
    	fout.open("datei.dat");
    	fout << i << f << x << endl;
    	fout.close();
    	i = 0;
    	f = 0.0;
    	x = '0';
    	ifstream fin;//Dateieingabestromobjekt
    	fin.open("datei.dat");
    	fin >> i >> f >> x;
    	fin.close();
    	cout << "i=" << i << " f=" << f << " x=" << x << endl;
    }
    

    Eingabe:

    int i = 777;
    	float f = 7.77;
    	char x = 'S';
    

    Ausgabe:

    int i = 7777;
    	float f = 0.77;
    	char x = 'S';
    

    Grüße
    Markuslab



  • Hast du dir mal datei.dat angeschaut? Dann sollte das Verhalten klar sein.


  • Mod

    Weil du sie hintereinander schreibst - ohne Leerraum dazwischen!

    7777.77S

    Der Parser für Ganzzahlen hört auf wo er den Punkt sieht. Den lässt er auch stehen. Die ersten Vier '7'er extrahiert er aber und packt sie in den int .

    Fließkommazahlen brauchen vor dem Dezimalpunkt keine Ziffer stehen zu haben - es wird so getan als ob es 0 wäre. Dann wird wieder beim 'S' angehalten und dieses stehen gelassen. ➡ f = 0.77

    Der Rest dürfte klar sein.

    Lösung:

    fout << i << ' ' << f << ' ' << x;
    

    P.S.: Nicht den Stream mit open öffnen. Mach es mit dem Konstruktor!



  • 7777.77S 😃
    Das heißt also, dass beim lesen auf "Typwechsel" geachtet wird?



  • Danke euch Beiden!! 🙂


Anmelden zum Antworten