Problem mit der Ausgabe einer Zahl am LCD

OP (Firma: TGM) #1606446
HI!

Ich habe wiedermal ein kleines Problem beim Programmieren. Und zwar 
übergebe ich meiner Funktion vier Werte und diese soll sie dann mehr 
oder weniger nur multiplizieren und das Ergebnis dann am LCD ausgeben.
Jedoch dürfte irgendwas bei der Rechnung passieren oder die Zahl einfach 
zu groß werden, was aber nicht sein dürfte. Alle Werte hab ich mit 444 
angenommen. Jeden Wert einzeln kann ich ausgegeben, dass heißt es kann 
lediglich an der Zeile mit der Rechnung oder beim umwandeln auf char ein 
Fehler sein.
In der Ausgabe steht dann statt der Zahl ein Fragezeichen.
1
void zeilenscan(int laengex, int laengey, int anfz, int endz)    //Steuert die zwei Motoren in einem Zeilenscannverfahren. Zeilen sind durch ez und iz vernderbar
2
{  
3
  int xz;  
4
  int d;
5
  int yz;
6
  float dauer;
7
  char buffer[20]="";
8
  lcd_puts("Dauer der \n");
9
  //dauer=laengex*laengey*(endz-anfz+1)/60;
10
  dauer=laengex*laengey;
11
  lcd_puts("Messung:");
12
  lcd_gotoxy(9,1);
13
  sprintf(buffer,"%d",dauer);
14
  lcd_puts(buffer);

Schon mal ein Dankeschön im Voraus für die Hilfen!

Lg Oliver
#1606450
Ich gehe mal davon aus, dass zuerst laengex*laengey als int ausgerechnet 
wird, was einen Überlauf ergibt, und das (falsche) Ergebnis wird dann in 
ein float konvertiert.

Ach ja: Im sprintf - bedeutet %d nicht eine Ganzzahl? "dauer" ist aber 
ein float.

Summa summarum: Probier's einfach mal mit einem anderen "dauer", z. B.:

long int dauer;
Gast #1607030
Oliver Kra schrieb:
> float dauer;
[..]
> sprintf(buffer,"%d",dauer);

Da passt was mit den Typen nicht zusammen, 'dauer' ist float, '%d' 
erwartet einen int-Artigen.

HTH
Gast #1607043
..ich muss schon wieder die Ingrid machen:
Ein anständiger(tm) Compiler meckert die fehlerhaften Typen übrigens 
sogar an (-Wall regelt :-) :
1
$ avr-gcc -Wall -c main.c -o main.o
2
main.c: In function ‘zeilenscan’:
3
main.c:7: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘float’

HTH
OP (Firma: TGM) #1607055
dauer ist jetzt ein int.
Der Fehler ist nur, dass, wenn die Zahl größer als 500 wird der Datentyp 
zu klein werd oder so und dann wird irgendwas angezeigt.
Aber die Zahlen werden ohnehin nicht all zu groß und bis zur maximalen 
Größe ist es kein großes Problem. Schöner wäre es trotzdem, wenn es 
einwandfrei funkt :-( Das einzige was er noch hat, ist, dass er immer 
abrundet, aber das macht auch nichts.

lg

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.