Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Problem beim Parsen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
28.04.2006, 10:08 Uhr
BulKathos



Moinsen.

Da ich bei der C-Programmierung Neuland betreten habe und ich mich noch nicht so in den Strukturen auskenne, wurde mir dieses Forum von einem Freund empfohlen.

Also, ich habe eine Datei (EinFile) mit jeweils 3 Zahlen pro Zeile:

0.3189001281489193 0.5443564375769299 1.422492721343416
0.5577265742845405 0.3566318843891023 0.8146864814754603
0.05714580141221107 -0.1809339186648064 0.06051693122854982
usw...

Diese Zahlen repräsentieren 3D-Koordinaten (x, y, z).
Nun möchte ich diese Zahlen in ein Vektorfeld einlesen:

float vopu[20]][3];
for (count1=0; count1<20; count1++)
{
fscanf(EinFileOut, "%f%f%f", &vopu[count1][0], &vopu[count1][1],vopu[count1][2]);
fgets(zeile, zlaenge, EinFileOut);
}

Wenn ich mir nun diese Matrix anzeigen lasse, hat 'er' meine Ausgangszahlen nach der 6ten Nachkommastelle abgeschnitten und gerundet.
0.318900, 0.544356, 1.422493
0.557727, 0.356632, 0.814686
0.057146, -0.180934, 0.060517
usw...

Meine Frage lautet nun, ob es eine Möglichkeit gibt, eine vieleicht nicht ganz so schwierige, um meine Zahlen im Vektorfeld so zu speichern, wie sie ursprünglich auch vorliegen?

Ich bedanke mich schon einmal im Voraus.

mfG

BulKathos
--
God doesn't play dice.

[Albert Einstein]
[1879-1955]
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.04.2006, 10:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,
float hat nur 6 nachkommastellen, double immerhin schon 12. mehr ist meist nicht drin (also mehr als 12 nachkommastellen) alsos statt float double verwenden und zum einlesen

%lf statt %f
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.04.2006, 10:21 Uhr
BulKathos



Danke.

Macht es Sinn, aus dem EinFile die Zeilen als String zu parsen, um diesen dann char-weise auseinanderzunehmen?
--
God doesn't play dice.

[Albert Einstein]
[1879-1955]
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.04.2006, 10:24 Uhr
BulKathos



@flo

Habe das Feld jetzt gedoubled und %lf verwendet.
Es kommt immernoch dasselbe raus, wie ich es oben beschreiben habe, also nach der 6ten gerundet.

mfG
--
God doesn't play dice.

[Albert Einstein]
[1879-1955]
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.04.2006, 18:42 Uhr
Helmut



Hallo !

C++:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int parsedouble(const string&, double* , int );

int _tmain()
{
    string s1 = "0.3189001281489193 0.5443564375769299 1.422492721343416";
    double lf[3];
    parsedouble(s1, lf, 3);
    return 0;
}
   int parsedouble(const string& string_in, double* lf_out, int token_max)
   {
       istringstream ist(string_in);
       int tokenanzahl = 0;
       while((ist >> lf_out[tokenanzahl++]) && (tokenanzahl < token_max)) ;  
       return 0;
   }




Also hier wid nichts abgeschnitten!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.04.2006, 20:26 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von Helmut:


C++:
int _tmain()





Der Mann traut sich was........ _tmain in der Linux Ecke

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.04.2006, 21:32 Uhr
Pler
Einer von Vielen
(Operator)


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.04.2006, 22:03 Uhr
Hans
Library Walker
(Operator)



Zitat von Spacelord:
[quote Helmut]

C++:
int _tmain()





Der Mann traut sich was........ _tmain in der Linux Ecke

MfG Spacelord
[/quote]

Kannst Du mich mal dann mal aufklären, wo es hin gehört, bzw. herkommt?
Ansonsten stelle ich fest, das er nicht genau gelesen hat. Der Frager schrieb oben C-programmierung, und er bringt einen Lösungsvorschlag in C++.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 28.04.2006 um 22:07 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
29.04.2006, 10:34 Uhr
Pler
Einer von Vielen
(Operator)


http://msdn2.microsoft.com/en-us/library/6wd819wh.aspx


Code:
BEGIN Microsoft Specific
[..]
You can also use _tmain, which is defined in TCHAR.h. _tmain will resolve to main unless _UNICODE is defined, in which case _tmain will resolve to wmain.
END Microsoft Specific

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.04.2006, 14:18 Uhr
0xdeadbeef
Gott
(Operator)


Am besten bei der Ausgabe die Feldlänge mitgeben:

C++:
printf("%.12lf", foo);


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: