Linkertoolfehler



  • SeppJ schrieb:

    Krümelkeks schrieb:

    Gibts eine gute Lösung hierfür?

    So wie du es schreibst, meinst du sscanf, nicht scanf (beide mal nachschlagen!). Das ist dann aber beides C, kein C++. Folge pumuckls Rat und nutze die C++-Streams. Deine ganze main:

    void Main()
    {
        double pwm = 0, spannung = 0, x = 0;
        DatenArray p;
        DatenArray s;
        DatenArray x1;
        ifstream datei;
        string zeichen;
        datei.open("F:\\Messdaten.txt");
    
        while(!datei.eof())
        {
            getline(datei,zeichen);
            const char *c = zeichen.c_str();
            scanf(c,"%d,%d,%d",pwm, spannung, x);
            p.AddElement(pwm);
            s.AddElement(spannung);
            x1.AddElement(x);
           
        }
        datei.close(); 
    }
    

    würde man in C++ so schreiben:

    int main()
    {
        DatenArray p;
        DatenArray s;
        DatenArray x1;
        {
          ifstream datei("F:\\Messdaten.txt");
          double pwm, spannung , x;
          while(datei >> pwm >> spannung >> x)
            {
              p.AddElement(pwm);
              s.AddElement(spannung);
              x1.AddElement(x);
            }
        }
    }
    

    Hierbei habe ich übrigens noch einen Fehler in der Programmlogik bereinigt: Du prüfst auf Dateiende, dann liest du, dann speicherst du ab, egal was beim Lesen passiert ist (es könnte Dateiende passiert sein). Richtig ist natürlich Lesen, dann prüfen ob dies erfolgreich war (und zwar auf alle(!) Fehler), dann abspeichern.

    Die p, s und x1 betteln übrigens danach, irgendwie zu einer Klasse zusammengefasst zu werden. Und dein ⚠ DatenArray ist eine (schlechte) Kopie von std::vector ⚠ .

    Vielen Dank.
    Habe es gerade einmal ausprobiert. Aber auch hier kommt er erst gar nicht in die while-Schleife hinein.


  • Mod

    Dann exisitert die Datei nicht oder kann aus anderen Gründen nicht geöffnet werden oder es findet bereits in der ersten Zeile ein Lesefehler statt.



  • Datei exestiert. Wird auch geöffnet. Er springt in den Schleifenkopf und dann gleich ans Ende der Main.

    So langsam verzweifel ich wirklich. Das mach definitiv keinen Spaß mehr...


  • Mod

    Dann stehen da keine drei doubles. Zeig mal den Anfang der Datei.



  • Ich habe zum Testen eine einfachte txt Datei mit folgenden Testwerten erstellt:
    21.23;234.2;123

    Die eigentliche Datei, die später eingelesen werden soll, hat natürlich weitaus mehr Werte.


  • Mod

    Dann ist ja auch kein Wunder, wenn da noch Semikolons zwischen stehen. Mach mal:

    double pwm, spannung , x;
          char semikolon;
          while(datei >> pwm >> semikolon >> spannung >> semikolon >> x)
    


  • Oh, danke. Ich dachte ich hätte es erwähnt.
    Schaut schon besser aus. Den ersten Wert speichert er korrekt. Bei den beiden hinteren zahlen macht er irgendwie alles durcheinander.


  • Mod

    Wenn du dich klarer ausdrücken würdest oder mehr Informationen liefern würdest, könnte man dir vielleicht sogar helfen. Also besser nichts verraten!



  • Habe den von dir geschriebenen Quellcode eingefügt. Dadurch ist er nun auch in die Schleife gesprungen.

    Beim debuggen habe ich feststellen müssen, dass er auf die Variable pwm 21.23 speichert. Dies ist auch der richtige Wert.
    Hingegen aber auf die Variable spannung 34.2 anstatt von 234.2 und auf x 23.00 anstatt 123. Irgendwo scheinen also Zahlenwerte verloren zu gehen.
    Fehlermeldungen gibt es ansonsten nicht und das Programm wird auch ordnungsgemäß beendet.

    Danke für deine Bemühungen!


  • Mod

    Das wiederum deutet stark da drauf hin, dass da keine Semikolons zwischen deinen Zahlen stehen...



  • Lies dir bitte mal den Link in meiner Signatur durch. Gerne auch weimal. Und dann poste uns bitte

    1. Den genauen Inhalt deiner Input-Datei, nicht etwas, was so ähnlich ist.
    2. Den genauen Quellcode deines Programms
    3. Die genauen Ausgaben des Programms bzw. den output des Compilers, sollte es Fehler und/oder Warnungen geben.

    Und bitte alles zusammen. Nicht den Input von vorgestern mit dem Programm von gestern und den Fehlermeldungen von heute. Das passt irgendwie nicht zusammen...



  • Fehler gefunden.

    Vielen Dank für eure Hilfe!


Anmelden zum Antworten