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. "%02ld" 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.
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: Data-Dictionary – Wikipedia. Wenn Du nur technische Typen hast, dann kann Dir der Compiler so oder so nicht viel helfen.
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.