dezimalzahl aus Datei in variable



  • Hallo!
    Also, ich will lediglich Dezimalzahlen aus einer Datei "wavenumbers.inp" einlesen und anschließend zur weiteren Verarbeitung an Variablen übergeben.
    Ich habe sowohl versucht, in dieser input-Datei die Zahlen durch spaces zu trennen:
    3324.50 345.435 333.4
    als auch, sie zeilenweise reinzuschreiben:
    3324.50
    345.435
    333.4

    Bei beiden Arten kommen mit meinem Programm nur verkrüppelte Zahlen raus. Hier die wesentliche Programmschritte (das void lesen_mit_get() wird von main aufgerufen):

    #include <complex>
    #include <iostream>
    #include <fstream.h>
    #include <stdio.h>

    long double wavenum1, wavenum2, wavenum3, wavenum4, wavenum5; // die Variablen, an die ich meine Dezimalzahlen übergeben will
    using namespace std;

    void lesen_mit_get()
    {
    ifstream in("wavenumbers.inp"); /*das ist mein input-file, siehe Anhang
    while(!in.eof()) /*solange, wie keine EOF erreicht ist, soll die Schleife die Werte an die Variablen übergeben, es wird sich im Endeffekt nur um max. 20 Zahlen handeln oder so, weswegen ich zunächst auch noch kein Array vorgesehen habe..*/
    {
    in >> wavenum1;
    cout << wavenum1; /*hier will ich EIGENTLICH zur Kontrolle den ersten Zahlenwert 3324.50 auf den screen ausgeben*/
    in >> wavenum2;
    cout<< wavenum2;
    in >> wavenum3;
    cout<< wavenum3;
    cin >> wavenum4;
    getchar();
    }
    }

    Das Problem liegt wahrscheinlich darin, dass a) das Programm die Dezimalzahlen aus dem Ascii-file nicht als longdouble interpretiert
    b) dass der in >> wavenum1 befehl nicht beim ersten whitespace haltmacht?

    Gruß, bender

    P.S.: Natürlich bekommt das Programm Probleme, wenn das file nur 3 einträge hat, die whileschleife aber mehr variablen füllen will.. Das werde ich später noch beheben, wichtig ist mir zunächst nur das richtige einlesen der Dezimalzahlen, die Zuwesiung an die varaiblen und die Weiterverarbeitung als long double…



  • lies die zahlen doch einfach in nen string ein und nimm dann atof()

    ps: code tags sind hier recht praktisch.



  • soweit ich weiß, gab's long double nur für alte 16-Bit Versionen von Microsoft, oder??? Heute ist das glaub ich das gleiche wie double. Außerdem leuchtet mir nicht ein, warum du kein Array verwendest, selbst wenn es sich nur um maximal 20 Werte handelt:

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    double waveNums[20];    // z.B. für 20 Werte
    
    void lesen() {
      ifstream inputFile("wavenumber.inp");
      int nPos=0;
      while (!inputFile.eof()) {
        inputFile >> waveNums[nPos++];
        out << waveNums[nPos-1];
      }  
      inputFile.close();
    }
    

    So, damit ist das ersten wesentlich kürzer und außerdem auf beliebig viele Zahlen erweiterbar. Das Einlesen sollte so auch funktionieren. Und auch weniger Einträge in der Datei sind kein Problem mehr...

    In Zukunft solltest du darauf achten keine C und C++ - Header zu mischen...und deine Dateien auch wieder zu schließen...

    Mfg, smasher1985



  • Vielen Dank!
    Hat wunderbar geklappt, hat mir auch viel Verständnis gebracht. Habe allerdings noch

    #include <stdio.h>
    

    einfügen müssen und aus dem

    out
    

    ein

    cout
    

    machen müssen.
    Das einzige, was mir noch nicht ganz klar ist, ist, warum am Ende des Files noch eine 0 mit ausgegeben wird, aber das werde ich wohl behebn können.
    Bzgl. der Mischung von C und C++ Headern: Ich habe hier eine kunterbunte Mischung von C/C++ Literatur, bis ich die beiden auseinanderhalten kann, wird's wohl noch ein bischen dauern 🙂
    Nochmal vielen Dank an alle,
    mfg bender


Log in to reply