mit fscanf double-Werte auslesen



  • Hallo,

    folgenden Code hab ich geschrieben, mit dem Double-Werte wie 1.90949836E-03 aus einer Txt-Datei ausgelesen und angezeigt werden sollen. Die Zahlen werden aber nicht richtig erkannt. Für jede eingelesene Zahl wird 0.000000 ausgegeben. Findet jemand den Fehler?

    #include <stdio.h>
    
    int main() 
    {
      FILE *file;
      double numbers[30][2]; 
    
      int i,k;
    
      file = fopen("readN2.txt", "r");
    
      if(file==NULL) {
        printf("Error: can't open file.\n");
        return 1;
      }
      else 
      {
        printf("File opened successfully.\n");
    
        i = 0 ;
        k = 0 ;
    
        while(!feof(file)) 
        { 
          fscanf(file, "%f", &numbers[i][k]);
          printf("%f\n", numbers[i][k]);
    
          k++;
    
          fscanf(file, "%f", &numbers[i][k]);
          printf("%f\n", numbers[i][k]);
    
          k--;
          i++;       
        }
    
        fclose(file);
        return 0;
      }
    }
    


  • Auf den ersten Blick fällt mir kein Fehler auf.
    Für mich interessant wäre in dem Fall, wie du die Daten gespeichert hast.
    Da du mit double-werten arbeitest, bietet sich %lf an, das steht für long float und entspricht eher einem double-wert.



  • Auf den ersten Blick fällt mir kein Fehler auf.
    Für mich interessant wäre in dem Fall, wie du die Daten gespeichert hast.
    Da du mit double-werten arbeitest, bietet sich %lf an, das steht für long float und entspricht eher einem double-wert.



  • Auf den ersten Blick fällt mir kein Fehler auf.
    Für mich interessant wäre in dem Fall, wie du die Daten gespeichert hast.
    Da du mit double-werten arbeitest, bietet sich %lf an, das steht für long float und entspricht eher einem double-wert.



  • Danke!!! Den Tipp hab ich gebraucht.

    Mit

    fscanf(file, "%lf", &numbers[i][k]);
    

    klappt jetzt das Einlesen.
    Damit die Ausgabe genauso aussieht wie die Zahlen in dem Txt-File, hab ich jetzt

    printf("%.7e\n", numbers[i][k]);
    

    geschrieben.

    Vielen Dank nochmal 🙂


Anmelden zum Antworten