Forum: Mikrocontroller und Digitale Elektronik sprintf frage


von ferrice (Gast)


Lesenswert?

bitte um hilfe
Mein Code:

#include <avr/io.h>
#include <stdio.h>

int main( void ) {
  char buflcd[3];
  float zahl;


  zahl = 2.55;
  sprintf(buflcd,"%f",zahl);


  }

warum funktioniert das programm so nicht.
wenn ich zahl als char deklariere dann geht es..

naja gut ich habe dann in buflcd meinen string drinnen..
aber wie gebe ich jetzt die acii werte nacheinander aus.??

mfg

von Yagan Z. Dongobar (Gast)


Lesenswert?

Hallo,

für die Zahl 2.55 ist buflcd[3] zu klein. Versuch es doch mal mit
char buflcd[20] oder grösser.

Wie du die Werte ausgeben kannst, hängt davon ab wohin.
Eventuell geht printf("%f", zahl); statt sprintf.

Ciao, Yagan

von ferrice (Gast)


Lesenswert?

hmm ja aber wie kann ich z.b. meinen string in dem 255 steht auf meinem
lcd ausgeben.

zum ausgeben hab ich ein unterprogramm:
z.b.
LCD_out("A");

so kann ich ein "A" ausgeben..

mfg

von Yagan Z. Dongobar (Gast)


Lesenswert?

wenn LCD_out("A") ok ist und nicht LCD_out('A')
und LCD_out("ABCDE") geht, kann die Funktion möglicherweisen einen
String ausgeben:

char lcdbuf[20];
sprintf(lcdbuf, "irgendetwas");
LCD_out(lcdbuf);

Falls LCD_out nur ein Zeichen ausgeben kann:

char lcdbuf[20];
char *string = lcdbuf;
sprintf(lcdbuf, "irgendetwas");
while (*string != 0)
   {
   LCD_out(*string++);
   }

Ciao, Yagan

von ferrice (Gast)


Lesenswert?

danke.. funktionieren tut es..


bitte noch um eine erklärung was da genau gemacht wird..

while (*string != 0)
   {
   LCD_out(*string++);
   }

danke

von Bertram (Gast)


Lesenswert?

der zeiger auf den string wird um jeweils eine stelle weitergrückt...
die richtige erklärung für dein obiges problem:

2.55 als String sind mindestens 5 zeichen.

2 . 5 5 und \0

frei nach joda:

aber in ein buch schauen, grundlagen c, sich lohnen würde

von Yagan Z. Dongobar (Gast)


Lesenswert?

while {} ist in C ein Wiederholungskonstrukt, auch 'Schleife'
genannt.
In der while-Schleife werden die Zeichen einzeln aus dem String geholt
und ausgegeben.
string ist ein Zeiger (pointer), der zunächst auf den Anfang von lcdbuf
zeigt.
Mit *string kann man das aktuelle Zeichen ansprechen, string++ bedeutet
anschliessende Weiterschaltung des Zeigers auf das nächste Zeichen.
C-Strings werden immer durch ein Null-Zeichen abgeschlossen, wodurch
man das Ende des Strings erkennen kann. Deshalb die Abfrage *string !=
0, was bedeutet, dass die Schleife solange durchlaufen wird, wie das
aktuelle Zeichen ungleich Null ist.

Ciao, Yagan

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.