Zwei Werte aus Datei auslesen



  • Hallo zusammen,

    ich möchte aus einer Datei in der folgendes steht:

    -1.18481714e+00 -5.19955084e-01
    2.75434450e+00 -2.17220156e+00
    1.40802782e+01 -1.06095278e+00

    die Zahlen auslesen und in einen zweidimensionalem Vektor abspeichern.

    Bisher mache ich es wie folgt:

    FILE *datei = fopen("/home/christian/Documents/GNGPython/Data.txt", "r");
        int err,i,n;
    
        double wertx[12],werty[12];
    
        i=0;
    
        if (datei==NULL){printf("Datei existiert nicht\n");}
        else{
          do{
            err = fscanf(datei,"%lf %lf",&wertx[i],&werty[i]);
            printf("%lf %lf\n",wertx[i],werty[i]);
            i++;
          }
          while(err !=EOF && i < 40);
        }
    

    Das Problem ist nun, dass er mir die Zahlen zwar einliest, aber verkürzt auf:

    -1.184817 -0.519955
    2.754345 -2.172202
    14.080278 -1.060953

    Ich möchte aber den kompletten Wert behalten. Dachte ich mache dies einfach indem ich

    double wertx[12],werty[12];
    

    auf mehr Stellen ändere, aber dies funktioniert nicht.
    Habt ihr eine Idee?



  • In C++ benutzt man normalerweise std::fstream . Mit std::getline() kann man z.B. in std::string -Variablen lesen und mit std::stringstream weiterarbeiten. 😉

    Du meinst schon C++ und nicht C? Falls ja, solltest du dir vielleicht auch printf() und Konsorten abgewöhnen.



  • Die Variante mit std::fstream hatte ich zuvor gewählt.
    Dort hatte ich dann aber das Problem die Werte nicht als Zahlen auslesen zu können.



  • redbomber schrieb:

    Die Variante mit std::fstream hatte ich zuvor gewählt.
    Dort hatte ich dann aber das Problem die Werte nicht als Zahlen auslesen zu können.

    Hallo Christian,

    das geht mit ifstream einwandfrei. Ich unterstelle mal, da stehen 12 Paare von x/y-Werten in der Datei ..

    #include <iostream>
    #include <fstream>
    
    int main()
    {
        using namespace std;
        double wertx[12],werty[12];
        ifstream datei("/home/christian/Documents/GNGPython/Data.txt");
        for( int i=0; i < 12 && datei; ++i )
            datei >> wertx[i] >> werty[i];
        if( datei )
        {
            cout << "12 Werte korrekt gelesen" << endl;
            // mache was mit wertx/y
        }
        return 0;
    }
    

    Gruß
    Werner



  • Super,
    vielen Dank euch beiden!
    Das hat jetzt soweit funktioniert.

    Wisst ihr jetzt nur noch wie ich den kompletten Wert

    -1.18481714e+00

    auslese?
    Bei mir wird der Wert immer auf

    -1.184817 abgerundet.

    Kann ich das auch mit setprecision machen?



  • hmm, setprecision ist scheins nur für die Ausgabe cout



  • Es gibt aber noch ios_base::precision() . In Zukunft hilft dir diese Referenz zu C++, um Funktionen und Klassen der Standardbibliothek nachzuschlagen.



  • warum wird hier nicht z.B.:

    f.file("datei.txt",ios::in);
    

    verwendet?



  • Weil ifstream verwendet wurde? Und somit die Flag nicht nochmal explizit gesetzt werden muss.



  • Wir haben es kürzlich mit angabe von flag gelernt, das es anders auch geht wusste ich noch nicht.
    Gibts darüber vielleicht eine Seite wo man sich genauer informieren kann?




Anmelden zum Antworten