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.
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.
;) 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.