www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik sprintf frage


Autor: ferrice (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Yagan Z. Dongobar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ferrice (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Yagan Z. Dongobar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ferrice (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke.. funktionieren tut es..


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

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

danke

Autor: Bertram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Yagan Z. Dongobar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.