Einlesen von Gleitkommazahlen



  • Hallo,
    ich habe ein kleines Problem beim Einlesen von Gleitpunktzahlen aus einer Textdatei. Mit Integer-Zahle hat es Problemlos funktioniert

    int wert;
    fscanf("datei.txt","%d",&wert);
    

    Sobald ich in der Datei die Zahlen in Gleitpunktzahlen der Form 1.000 geändert habe, und %d durch %f ersetzt habe, erhielt ich riesengroße Wert für von "wert" (92500...000.00000)
    Könnte mir bitte jemand erklären, wie ich Gleitkommazahlen einlese?
    Vielen Dank im Voraus.



  • ich würde vorschlagen, dass du zuerst liest, was man: fscanf(3) für Parameter übernimmt ... nämlich ein FILE* und nicht ein char*



  • int wert;
    FILE *fp;
    
    if ((fp=fopen("datei.txt","r"))!=NULL)
          fscanf(fp,"%d",&wert);
    


  • supertux schrieb:

    ich würde vorschlagen, dass du zuerst liest, was man: fscanf(3) für Parameter übernimmt ... nämlich ein FILE* und nicht ein char*

    sorry, war mein Fehler beim Schreiben des Beitrages, hab natürlich FILE* als Parameter übergeben. Sonst hättes es mit Integer ja auch nicht funktioniert.
    Trotzdem habe ich immer noch des Problem, dass ich keine Gleitkommazahlen einlesen kann.



  • Gast... schrieb:

    sorry, war mein Fehler beim Schreiben des Beitrages, hab natürlich FILE* als Parameter übergeben. Sonst hättes es mit Integer ja auch nicht funktioniert.
    Trotzdem habe ich immer noch des Problem, dass ich keine Gleitkommazahlen einlesen kann.

    Dann schreib mal genau wie du den Wert einliesst, wie du die Datei öffnest, wie diese aussieht usw...



  • %lf für doubles, %f für floats statt %d



  • Ihr wollt es also ganz genau wissen.
    Also gut! Der ganze Spass sieht folgendermaßen aus:

    FILE* file;
    void fillMat(double** A,unsigned int Z, unsigned int S)
    {
    	unsigned int i,j;
    	file=fopen("matrix.txt","r");
    	if(file==NULL)
    	{	
    		printf("Beim Oeffnen der Datei ist ein Fehler aufgetreten!");
    		return;
    	}
    	for(i=0; i<Z; i++)
    		for(j=0; j<S; j++)
    		{
    			fscanf(file,"%f ",&(A[i][j]);
    		}	
    	fclose(file);
    }
    

    Die Textdatei matrix.txt organisiert sich wie folgt:

    1.000 0.000 2.000 3.000 4.000 5.000
    

    Wie weiter oben schon erwähnt, funktioniert alles, wenn in fscanf %d und in der Textdatei nur Ganzzahlen stehen.


Anmelden zum Antworten