problem mit fscanf



  • Prüfe den Rückgabewert von fscanf, der muss in deinem Fall ==6 betragen, tut er das nicht, machst du irgendwas falsch und die Werte in den Variablen sind Schrott.



  • Initialisier mal die Variablen. Gib ihnen vor dem scanf mal einen Wert.
    Zu Testzwecken durchaus != 0.



  • Dann bekomme ich zwar nicht mehr irgendwelche ellenlangen Zahlen mehr heraus, sondern genau die initialisierten, aber richtig sind die ja auch noch nicht...

    Noch mehr Ideen?



  • Dann steht noch irgend etwas anderes in der Datei und fscanf gibt auch nicht 6 zurück.
    Schau dir die Datei mal mit einem Hexviewer an.

    Oder probier mal

    fscanf(fp, " %lf %lf %lf %d %lf %d", &x, &y, &z, &draper, &mag, &hrn);
    


  • Dann beschreib mal was dir unter "richtig" vorschwebt.

    Warum hast du die Zeilen 7 bis 12 in deinem Quelltext?



  • Also wenn ich %f durch %lf ersetze bekomme ich folgendes raus:

    False
    0.000000, 0.000000, 0.000000, 6, 0.000000, 5
    

    Und laut Hex-Editor steht auch das richtige in der Datei...

    Die Zeilen 7-12 existieren, weil das ganze eig. mit dem struct funktionieren sollte. Aber ich habe es mal auf das einfachste reduziert, damit ich möglichst alle anderen Fehlerquellen ausschließen kann.
    Und unter richtig verstehe ich das, was in der txt drinsteht...



  • Hast du auch die richtige "./l.txt"?
    Rufst du das Programm von der Konsole oder aus der IDE auf?

    Du kannst die Zeile auch mit fgets einlesen und dann mit sscanf auswerten.
    Dann kannst du sie vorher auch noch ausgeben.

    Bei scanf ist %f für float, %lf für double.
    Bei printf ist %f für float und double.



  • Die txt ist die richtige Datei, ich habe es auch schon mit der Datei versucht, die später im Programm benutzt werden soll. Mit der funktioniert es auch nicht.

    Ich schreibe mit Code::Blocks und rufe auch daraus auf.

    Mit %lf in fscanf und %f in printf bekomme ich immerhin wieder die initialisierten Zahlen... =), aber...



  • Auf die Punkte hinter dem aber kommt es an.

    Wie soll das Ergebnis bei dir aussehen?

    So wie du schreibst nicht so:

    True
    -0.994772, 0.023164, -0.099456, 28, 4.610000, 3
    

    oder?
    Was soll da anders aussehen?

    Nur geraten, bist du unter Linux oder Mac unterwegs?



  • Ich habe das gerade mal bei mir mit Code::Blocks probiert.
    Mit den richtigen Formatspecifiern funktioniert das tadellos.

    Wo steht denn die Datei? Bei der .exe oder bei der .c?



  • Also ich hätte gerne die Zahlen aus der txt mit "," getrennt ausgegeben.
    Ich arbeite normalerweise unter Windows, ich habe aber auch ein Ubuntu auf dem Laptop und noch eine LXDE-Virtual-Machine, aber ich bin doch eher Windows-affin...
    Die 1.txt befindet sich in dem gleichen Ordner wie die main.c und die main.exe
    Ich hatte auch mal einen Code, der über getchar Zeichen für Zeichen ausgelesen und wieder ausgegeben hat, der mir das Richtige ausgespuckt hat...

    mfg



  • Bei mir steht die .exe in Projektverzeichnis/bin/debug.
    Die .c steht im Projektverzeichnis, genau wie die 1.txt.



  • Also das hier wäre mein BuildLog:

    Compiling: C:\Users\Valentin\Desktop\Uni\Prog 2\Übungsblätter\stars_progs\main4.c
    Linking console executable: C:\Users\Valentin\Desktop\Uni\Prog 2\Übungsblätter\stars_progs\main4.exe
    Process terminated with status 0 (0 minutes, 0 seconds)
    0 errors, 0 warnings



  • Hat keiner mehr Ideen?



  • Ich hatte doch oben ein Ergebnis hin kopiert. Ist das wie du es dir wünscht?
    Das solltest du erhalten, wenn du das was wir hier geschrieben haben umsetzt.

    Wenn du dir das anders vorstellst, zeige uns dein Wunschergebnis.



  • Naja, also das, was du geschrieben hattest hätte ich gerne, aber ich bekomme es einfach nicht. Ich habe ja alles versucht, was ihr mir geraten hattet, aber ich habe nie das richtige rausbekommen.
    Ich habe es jetzt mal noch mit lcc versucht, aber das gibt mir gar nichts aus, außer, dass der return -1 war...

    Wenn ich noch was übersehen habe, korrigiert mich, aber ich wüsste es nicht...



  • meischda schrieb:

    Ich habe es jetzt mal noch mit lcc versucht, aber das gibt mir gar nichts aus, außer, dass der return -1 war...

    Dann wurde das exit(-1) ausgeführt. Dein Programm konnte die Datei nicht öffnen.
    Dann musst du zusehen, das deine 1.txt im aktuellen Verzeichnis ist. Was immer das auch bei deiner Konstelation heißt.



  • Stimmt. LCC speichert woanders. Aber auch mit der txt im richtigen Ordner bekomme ich nur die initialisierten Zahlen raus... 😕



  • Dann schreib die 1.txt nochmal neu. Ohne Copy&Paste.



  • Zeige mal deinen aktuellen Quelltext mit den entsprechenden Fehlerabfragen im Quelltext.
    Eigentlich hätte die erste Antwort, wenn du die richtig umgesetzt hättest zur Lösung geführt. Aber ich habe den Verdacht du hast nur immer Teile der Antworten umgesetzt.

    Da du ja siehst, wie wir hier ohne Fehlerkontrolle in deinem Quelltext hier herum raten, sollte dein Quelltext im Fehlerfall einige Meldungen heraus geben, damit diese leichter gefunden werden können. Denn deine Aussagen was der Quelltext macht oder machen soll, waren nicht sehr genau 🙄


Anmelden zum Antworten