Aequivalent von fscanf fuer istream gesucht
-
Guten Morgen (oder fast schon mittag :-))
Ich moechte gerne aus einer Datei double Werte auslesen. Und zwar sieht die Datei so aus:
4.083762 0.8763625 8.937626
Zwischen meinen Werten ist also immer ein '/t'. Was ich jetzt moechte ist die Werte einlesen und jeder dieser Werte einer Dimension eines 3d-Punktes zuordnen. Ich habe soetwas schon gemacht in c mit File* und fscanf, jetzt brauche ich aber eine istream und wollte fragen wie das jetzt funktioniert.
Es sollte dann irgendwie sowas dabei rauskommen:
istream& PointN::operator>>(istream& in) { float float0=0.,float1=0.,float2=0.; fscanf(in,"%f",&float0); //C-Code, tut so natuerlich net fscanf(in,"%f",&float1); fscanf(in,"%f",&float2); data[0] = float0; //Dimensionen meines Punktes data[1] = float1; data[2] = float2; return in; }
-
C++ Stream werden mit operator>> gelesen (und mit operator<< geschrieben) - die Formatkennungen benötigst du damit nicht mehr:
istream& operator>>(istream& in, PointN& p) { for(int i=0;i<3;++i) in>>p.data[i]; }(übrigens kannst du op>> nicht als Member von PointN schreiben, weil immer der linke Operand des Operators an den this-Zeiger übergeben wird - und das ist beim Einlesen traditionell der istream).