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.
-
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.77Der 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!!
