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).


Anmelden zum Antworten