Formatstring- Zusammenstellung gesucht
-
Hallo Forumsmitglieder,
ich habe mein C- Buch verschmissen, in dem die Möglichkeiten des Formatstrings ausgiebig beschrieben wurden und beim Googeln stolpere ich 5000- mal über "%d" oder Formatstring- Sicherheitslücken, die Compiler- Referenz ist zu kryptisch und ohne Beispiele
.
Hat jemand einen Link zu 'ner umfassenden Zusammenstellung, womöglich mit Beispielen?
Oder irgendeinen Print, den man schnell auf den Scanner klatschen kann?Danke!
-
man: printf(3) - oder du suchst in der MSDN nach "printf format specifications"
-
CStoll schrieb:
man: printf(3) - oder du suchst in der MSDN nach "printf format specifications"
Nein, das kommt schon hin, wenngleich hier immer nur Beispiele mit %d aufgeführt sind.
Ich habe aber gerade ein Float- Darstellungsproblem, da schweigen sich die Manuals ziemlich aus ... :p
-
Wie äußern sich denn diese Probleme? Du hast 5 verschiedene Kennungen für double-Ausgaben (float's werden schon vor der Übergabe zu double vegrößert):
- %e und %E geben die Zahl im wissenschaflichen Format 1e10 aus (die Präzission gibt an, wieviele Nachkommastellen folgen)
- %f gibt die Zahl im üblichen Dezimalformat 10000.00 aus (die Präzision bestimmt ebenfalls die Anzahl der Nachkommastellen)
- %g und %G wählen die kompaktere Darstellung aus %f und %e bzw. %E
(und da sagen die Leute, die IOStream-Formatierung sein kompliziert :D)
-
CStoll schrieb:
Wie äußern sich denn diese Probleme?
Die Ausgabe habe ich zurechtgebosselt, da kommt jetzt endlich, was ich brauche
.
Aber beim Einlesen
sscanf( editstring, "%f", &wert );
kommt Müll in "wert" an. Was mache ich da falsch?
-
pointercrash() schrieb:
Aber beim Einlesen
sscanf( editstring, "%f", &wert );
kommt Müll in "wert" an. Was mache ich da falsch?
'wert' muss ein double sein, kein float.
...oder dein 'scanf' kann keine fliesskommazahlen (kann man meistens in den linker-einstellungen wählen, welches 'scanf' benutzt werden soll. das fliesskommafähige scanf ist oft zu fett).
-
pale dog schrieb:
pointercrash() schrieb:
Aber beim Einlesen
sscanf( editstring, "%f", &wert );
kommt Müll in "wert" an. Was mache ich da falsch?
'wert' muss ein double sein, kein float.
Nein, %f kennzeichnet float-Eingaben, %lf steht für double.
-
CStoll schrieb:
Nein, %f kennzeichnet float-Eingaben, %lf steht für double.
stimmt, hab' bei printf geguckt.
-
Werte Forumsmitglieder,
richtig, da ist C pingelig, klappt nur mit "%lf" als Format auf double und den Typ hab' ich nach CStolls Hinweis genommen. "%f" bei der Ausgabe von double scheint kein Problem zu sein, wirkt ein bißchen inkonsistent auf mich.
CStoll schrieb:
(und da sagen die Leute, die IOStream-Formatierung sein kompliziert )
Naja, Du hast drei Zeilen gebraucht, als ich Ende der 70er BASIC auf 'ner DEC gelernt habe, waren dem Thema "formatierte Zahlenausgabe" im Manual satte sechs Seiten gewidmet, aber mit einer Tonne von Code+Ausgabe- Paaren. So eine Aufstellung hätte ich gesucht, es war dann doch noch recht viel zum Herumprobieren.
Wie auch immer, aus "8.2" werden jetzt 8.1999... und das war's, was ich brauchte.
Meine Herren, besten Dank
-
pointercrash() schrieb:
Werte Forumsmitglieder,
richtig, da ist C pingelig, klappt nur mit "%lf" als Format auf double und den Typ hab' ich nach CStolls Hinweis genommen. "%f" bei der Ausgabe von double scheint kein Problem zu sein, wirkt ein bißchen inkonsistent auf mich.
Ja, das gehört zu den Problemen, die ich im cout vs. printf() Thread auch angesprochen habe. Das hängt wohl mit der Integral Promotion zusammen, die C auf variable Argumente anwendet: float-Parameter werden zu double konvertiert, float*-Parameter bleiben was sie sind - darum muß printf() nicht zwischen float und double unterscheiden.
CStoll schrieb:
(und da sagen die Leute, die IOStream-Formatierung sein kompliziert )
Naja, Du hast drei Zeilen gebraucht, als ich Ende der 70er BASIC auf 'ner DEC gelernt habe, waren dem Thema "formatierte Zahlenausgabe" im Manual satte sechs Seiten gewidmet, aber mit einer Tonne von Code+Ausgabe- Paaren. So eine Aufstellung hätte ich gesucht, es war dann doch noch recht viel zum Herumprobieren.
Ja, ich hab' das Thema auch sehr stark gekürzt. Wenn du alle Feinheiten der Formatstrings verstehen willst, brauchst du wohl deutlich mehr als diese drei Zeilen