Floats aus Datei einlesen
-
hi leute , ich benötige eure hilfe, denn die FAQs haben mich leider nicht wirklich weitergebracht.
Ich möchte eine datei einlesen die in jeder zeile eine unbekannte anzahl floats enthält. Die Anzahl der zeilen ist auch unbekannt.Die Datei könnte ungefähr so aussehen:
0.11 0.22 0.33 0.44 0.55 0.66 0.77 0.88 0.99 1.11 0 1.11 0.99 0.88 0.77 0.66 0.55 0.44 0.33 0.22 0.11 1 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2 0.11 0.22 0.33 0.44 0.55 0.66 0.77 0.88 0.99 1.11 0 1.11 0.99 0.88 0.77 0.66 0.55 0.44 0.33 0.22 0.11 1 1.10 1.20 1.30 1.40 1.50 1.60 1.70 1.80 1.90 2.00 2
das programm dafür hab ich mir folgendermaßen überlegt:
float ptr; int c; c=fscanf(fz,"%f",&ptr); while (c!=EOF) { printf("%f ",ptr)); c=fscanf(fz,"%f",&ptr); }
das problem ist allerdings, dass fscanf in dem fall nicht die zeilenumbrüche (\n) findet und ich somit auch nicht die anzahl der float-einträge in jeder zeile ermitteln kann und somit auch nicht die anzahl der zeilen. Diese beiden Parameter benötige ich aber, um danach die floats in ein 2d Array einzulesen.
Hat jemand ne idee wie ich die zeilenumbrüche irgendwie detektieren kann?
-
Nach dem fscanf()-Aufruf steht der Lesezeiger direkt hinter dem jeweiligen Wert - da kannst du das nächste Zeichen per fgetc() einlesen und auswerten.
(PS: scanf() und Kollegen gehören ins C-Board (eine Etage höher) - in C++ nimmt man dafür IOStreams)
-
Danke für die schnelle antwort, funzt perfekt
-
float ptr1; c=fscanf(fz,"%f",&ptr1); printf("%f \n",ptr1);
aus einer weiteren datei möchte ich diverse floats auslesen, die folgendermaßen aussehen könnten: -0.022194838
wenn ich mir allerdings ptr1 anzeigen lasse, stelle ich fest dass nur 6 stellen nach dem komma angezeigt werden.
Liegt der fehler jetzt nur in der darstellung bei printf (das wär mir egal) oder werden standardmäßig nur 6 stellen ausgelesen bei scanf(das wär schlimm)?
-
It0101 schrieb:
Liegt der fehler jetzt nur in der darstellung bei printf (das wär mir egal) oder werden standardmäßig nur 6 stellen ausgelesen bei scanf(das wär schlimm)?
Ersteres - wenn du es genauer haben willst, mußt du die Präzision im printf()-Formatstring mit angeben:
printf("%.9f",ptr1);//Ausgabe auf 9 Stellen genau
-
Hi!
Float Werte haben eben nur eine sechs stellige Genauigkeit. Brauchst du mehr solltest du double verwenden.
Übrigens ist das immer noch C Code den du da fabrizierst.grüße
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.