Guten Tag,
Es gibt zwar schon genügend Threads über dieses Thema, und ich habe auch
schon diverse Codezeilen gelesen, jedoch manche nicht ganz verstanden.
Bis ich auf diese paar Zeilen gestoßen bin:
void updateView(double number)
{
char value[100];
sprintf(value,"%g",number);
}
Bei den kommenden Funktionen, die auch funktionieren, gebe ich einen
String entsprechend der X und Y Position auf mein EA DOGL128-6 Display
aus.
(Verwundung eines ATMEGA328p)
char_x=90;//0-128
char_y=2; //0-8
display_write("Hallo");
Da ich jetzt aber einen Double-Wert ausgeben möchte und diese Funktion
nur für Strings geeignet ist, habe ich mich nach einer Double to String
Umwandlung umgeschaut.
Doch leider funktioniert dies nicht:
double number = 10;
char_x=90;//0-128
char_y=2; //0-8
sprintf(value,"%g",number); //Umwandlung double to string
display_write("value");
danke schonmal für eure Hilfe!
lg
Marcel
> void updateView(double number)> {> char value[100];> sprintf(value,"%g",number);> display_write("value");> ^ ^> }
1) display_write(value);
2) char value[100]; ist eine lokale Variable, die nur innerhalb
updateView() gültig ist. Deine Ausgabefunktion display_write() muss dann
innerhalb updateView() aufgerufen werden. Oder du machst char
value[100]; zu einer globalen Variable.
Danke schonmal für so eine schnelle Antwort !
Funktion dtostrf:
char* dtostrf (double val,char width,char prec,char *s)
Width sagt mir jetzt auf die schnelle nichts.
prec wird die Anzahl der Nachkommastellen sein.
und warum kommt beim char teilweise ein " * " vor ?
lg
C-Grundlagen 2. oder 3. Stunde im C-Kurs
"das ist eine Stringkonstante" und "value" ist eine andere.
char value[100]; ist ein Feld von 100 chars
Man kann eine Stringkonstante in ein char Feld speichern
char value[100] = "das ist eine Stringkonstante";
Möchte man die Stringkonstante ausgeben, kann man sie direkt ausgeben:
display_write("das ist eine Stringkonstante");
Oder man kann die Kopie aus dem Feld ausgeben, in dem man die Adresse
des ersten Zeichens als Argument übergibt
display_write(&value[0]);
Oder aquivalent in kürzerer Schreibweise ohne &...[0]
display_write(value);
Bei dtostrf brauchst du nicht raten, dafür gibt es eine Doku:
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42
Also z.b. 10.0 ausgeben
dtostrf(10, 2, 1, value);
oder
dtostrf(number, 2, 1, &value[0]);
Das char *s in der Beschreibung ist ein weiterer Datentyp aus der 4.
oder 5 C-Stunde: Ein Zeiger (Pointer) auf ein char.
Du kennst schon &value[0] als Adresse des ersten Zeichens in deinem Feld
value. Die kannst (musst) du an dieser Stelle übergeben.
Na ich wusste schon, dass es sich dabei um strings und dergleichen
handelt!
Verwirrt hat mich nur der Stern bzw. Malpunkt *
zb.
char* dtostrf (double val,char width,char prec,char *s)
^ ^
| |
ok, werde mich dann mit dem weiterbeschäftigen
danke schön
lg
Marcel Ofitsch schrieb:> Na ich wusste schon, dass es sich dabei um strings und dergleichen> handelt!> Verwirrt hat mich nur der Stern bzw. Malpunkt *
Das widerspricht sich.
Bevor Du weiterstoppelst: Kauf Dir ein C-Buch. Und lies es durch.
Empfehlung:
Brian Kernighan & Dennis Ritchie, "Programmieren in C", 2. Ausgabe,
Hanser-Verlag.
Ist zwar schon 20 Jahre alt, aber immer noch das Buch, das einem alles
relevante über C vermittelt.