Double to String C

Gast #2116396
Lesenswert?

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
Gast #2116413
Lesenswert?

> 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.
Gast #2116468
Lesenswert?

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
Gast #2116486
Lesenswert?

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);
Gast #2116498
Lesenswert?

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.
Gast #2116554
Lesenswert?

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
Persönliche Seite #2116805
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren