Forum: Compiler & IDEs dtostrf funktion allgemein


von Klaus K. (Firma: K&K) (benni1)


Lesenswert?

hi,

ich habmal ne frage zu der dtostrf funktion. und zwar blick ich generell 
net wie ich die funktion verwenden soll.
ich muss ein double in einen sting den ich am lcd ausgeben möchte 
umwandeln.
hab mich mich deshalb informiert und bin auf die dtostrf gestoßen. bin 
auch noch ein anfänger in c


in der stdlib.h steht sie so drin:

dtostrf(double __val, char __width, char __prec, char *__s)

wäre nett, wenn mir jmd helfen könnte.

von Karl H. (kbuchegg)


Lesenswert?

Klaus Klaussen wrote:
> hi,
>
> ich habmal ne frage zu der dtostrf funktion. und zwar blick ich generell
> net wie ich die funktion verwenden soll.
> ich muss ein double in einen sting den ich am lcd ausgeben möchte
> umwandeln.
> hab mich mich deshalb informiert und bin auf die dtostrf gestoßen. bin
> auch noch ein anfänger in c
>
>
> in der stdlib.h steht sie so drin:
>
> dtostrf(double __val, char __width, char __prec, char *__s)
>
> wäre nett, wenn mir jmd helfen könnte.

In Fällen wie diesen ist es immer gut einfach mal google
anzuschmeissen und den Funktionsnamen einzugen. Meist hat
man dann in den ersten Links einen dabei, der einer Doku
gleichkommt.

Aber wollen wir doch mal ein bischen raten, was die
Argumente so sein könnten. So viele sind es ja nicht.

dotostrf hat 4 Argument
double  __val
char    __width
char    __prec
char*   s

Was könnte wohl was sein?

__val dürfte klar sein. Wenn die Funktionen für einen double
eine String Repräsentierung bestimmen soll (aka ihn in einen
String umwandelt), dann wird die Funktion wohl auch den double
benötigen. Also da wird wohl der double reingesteckt werden müssen.

Auf der anderen Seite wird die Funktion wohl auch das String-Array
benötigen, indem sie die String Repräsentierung ablegen kann.
Da wir wissen, das Arrays in C immer per Pointer übergeben werden
und 's' der einzige Character Pointer im Aufruf ist, wird das dann
ja wohl die Angabe des Character Arrays sein.

Aber was ist __width und __prec.
Nun, da fragen wir uns doch gleich mal: Was wollen wir denn von
der Funktion? Ja klar, sie soll eine String Repräsentierung einer
double Zahl bestimmen. Aber wie soll die aussehen? Soll eine
Zahl 3.141592654 auch tatsächlich so als String ausgegeben werden,
oder wäre es nicht toll, wenn man sagen könnte: 3 Nachkommastellen
sind genug, ich bin also mit "3.142" zufrieden.
Wäre es nicht auch gut, wenn ich sagen könnte: In meinem Character
Array, das ich als Aufrufender zur Verfügung stelle, ist Platz für
maximal 8 Zeichen. Das wäre schon gut, denn eine Zahl 3.141592654
mit seinen insgesamt 11 Positionen (inklusive Dezimalpunkt) wird
nie und nimmer in ein Array mit 8 Zeichen hineinpassen.

__width wird also etwas mit der kompletten 'Breite' der Ausgabe zu
tun haben, während __prec möglicherweise etwas mit der Anzahl
der Nachkommastellen zu tun hat.

Und genau so ist es auch:
Mittels _width legt man fest, welche Feldbreite die komplette
Ausgabe belegen soll. Dabei sind alle Zeichen mit eingeschlossen.
Also auch Dezimalpunkt und ein mögliches Vorzeichen.
Mittels __prec legt man fest, wieviele Stellen dieser Feldbreite
für den Nachkommanteil benutzt werden können.

Bsp
1
  double  f = 2.0;
2
  char ascii[10];
3
4
  dtostrf( d, 7, 2, ascii );

dtostrf soll also den Wert in d in eine Text Repräsentierung
überführen, wobei der Text in ascii landen soll. Der Text
soll 7 Zeichen enthalten, von denen maximal 2 die
Nachkommastellen darstellen sollen.


Funktionen in den Header-Files nachzuschlagen, ist zwar für einen
Fortgeschrittenen eine gute und vor allem schnelle Möglichkeit,
zu Informationen zu kommen. Für einen ANfänger ist das aber eher
nichts. Da bietet sich eine Google Suche an oder aber der Ankauf
von Literatur. Vor allem letzteres ist sehr zu empfehlen, da
ein gutes Buch durch nichts zu ersetzen ist. Es zeigt die
Funktionen und ihre Verwendung normalerweise im Kontext von
Aufgaben und Übungsaufgaben und enthält auch Erläuterungen
und Erklärungen die man so im Web meist nicht findet. Ganz
abgesehen davon, führt einen ein Buch systematisch durch alle
Bereiche einer Progammiersprache und genau an diesem Punkt
fehlt es bei vielen Online Tutorials.

von Klaus K. (Firma: K&K) (benni1)


Lesenswert?

;)

ok jetzt hats auch son nub wie ich verstanden, echt gut erklärt.
danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.