Vielen Dank genau das und der Post vorher haben wir sehr geholfen. Gibt es noch die Möglichkeit die 4 Stellen als Parameter zu übergeben, um auch 2 oder 3 Stellen nur zu nutzen?
gloob:
Vielen Dank genau das und der Post vorher haben wir sehr geholfen. Gibt es noch die Möglichkeit die 4 Stellen als Parameter zu übergeben, um auch 2 oder 3 Stellen nur zu nutzen?
void LCD_write_int(unsigned char X, unsigned char Y, int value, char invert, int anzStellen){
char buf[20];
char format[20];
switch (anzStellen)
{
case 2: strcpy(format, "%02d"); // zwei Stellen, wenn anzStellen == 2
break;
case 3: strcpy(format, "%03d"); // drei Stellen, wenn anzStellen == 3
break;
default: strcpy(format, "%04d"); // vier Stellen, wenn anzStellen sonst was
}
sprintf (buf, format, value);
LCD_write(X,Y,buf,invert);
}
Oder "format" sonst wie dynamisch zusammenbauen. "%02*l*d" verwenden, wenn value ein long statt int ist.
Viele Infos zu allem (u.a. den Formatspezifikationen) im Internet unter Stichwort "printf" oder im C-Buch deines Vertrauens ;)
Vielen Dank für deine Hilfe. Auf die Idee mit den Case bin ich garnicht gekommen. Ist habs jetzt so in meinen Panorama Roboter eingebaut und es funktioniert alles so wie es soll.
[quote author=Udo Klein link=topic=58487.msg420775#msg420775 date=1302806082]
Fipptehler [] ist jetzt korrigiert. Das kommt davon wenn man nicht in einer IDE sondern im Browser tippt ;)
[/quote]
Tja, der Mensch ist halt verwöhnt. Das waren noch Zeiten, als man mit vi statt Visual Studio seine Programme geschrieben hat...
So am Rande: Ich frage mich, warum der Compiler hier nicht mal 'ne leise Warnung abgibt, dass bei der Zuweisung von '0'+anz_stellen (int!) in einen char irgendwas verlorengehen könnte? Auch nicht im AVR-Studio 4, wo ich -Wall gesetzt habe.
Wieso sollte er? Das gehört so. char ist auch nur ein integer Typ. Wenn Du das wolltest hätte der Compiler viel zu warnen.
Wenn Du bei sowas richtig gewarnt werden willst, dann sollte der Compiler besser die Semantik kennen, d.h. er braucht sowas wie ein Dictionary: http://de.wikipedia.org/wiki/Data_Dictionary. Wenn Du nur technische Typen hast, dann kann Dir der Compiler so oder so nicht viel helfen.
[quote author=Udo Klein link=topic=58487.msg420814#msg420814 date=1302808158]
Wieso sollte er? Das gehört so. char ist auch nur ein integer Typ. Wenn Du das wolltest hätte der Compiler viel zu warnen.
[/quote]
na, mal angenommen in anz_stellen stünde irgendwas über 255 drin. Dann würde es im char (format[2]) doch ungemütlich eng.
Visual Studio sagt in einem solchen Fall zur Sicherheit
"warning C4244: '=' : conversion from 'int' to 'char', possible loss of data".
Ich hätte nicht gedacht, dass ich mit einer solchen simplen Frage ein so großes Aufkommen verursachen kann.
Ich hab jetzt die Version von Udo genommen da sie um einiges universeller ist als die Case Anwendung XD.