Erich Floh wrote:
> float temp; hier steht die temperatur mit einer kommastelle und
> maximal 3 stellen vor dem komma , zwei stellen wert und ein eventuelles
> minus
Rechnen wir mal:
1 Kommastelle
1 Stelle für das Komma
3 Stellen vor dem Komma
1 obligatorisches '\0' für den String
------
6
> char tempstr[5];
Der ist also schon mal um 1 Zeichen zu kurz.
> if((temp < 100) && (temp > 10)) also zweistellig
> {
> tempstr[0] = ' ',
> dtostrf(temp,2,1,tempstr[2]);
tempstr[2] ist ein einzelner char
Was du willst, ist die Adresse an der dieser char beginnen soll.
&tempstr[2]
Aber auch das hilft dir nicht viel.
tempstr[0] enthält ein Leerzeichen
tempstr[1] enthält .... irgendwas
tempstr[2] ab dort beginnt dann deine Stringrepräsentierung.
> so frage ich weiter bis ich alle möglichkeiten durch habe die es gibt
> Das mache ich bei allen zahlen.
Ziemlich umständlich.
Lass dir doch einfach den String mal generieren.
Danach siehst du nach wie lange der String geworden ist, und gibst vor
dem String eine entsprechende Anzahl Leerzeichen aus.
Und deine Formatierangaben beim dtostrf stimmen auch nicht.
> dtostrf(temp,2,1,tempstr[2]);
^
|
+-- das hier ist die Feldbreite: Also die Anzahl
aller Zeichen insgesammt. Inklusive Dezimalpunkt
und Vorzeichen
1 | char tempstr[10]; // hier ist kleckern meist kontraproduktiv
|
2 |
|
3 | dtostrf( temp, 5, 1, tempstr );
|
4 |
|
5 | // wieviele Leerzeichen braucht man?
|
6 | AnzLeer = 5 - strlen( tempstr );
|
7 | for( i = 0; i < AnzLeer; ++i )
|
8 | lcd_putc( ' ' );
|
9 | lcd_puts( tempstr );
|
Für die Ausgabe der Leerzeichen gibt es auch noch einen kleinen Trick
(Ich hoffe mal, dass ich mich jetzt nicht um 1 verzählt habe)
1 | char tempstr[10]; // hier ist kleckern meist kontraproduktiv
|
2 |
|
3 | dtostrf( temp, 5, 1, tempstr );
|
4 |
|
5 | // wieviele Leerzeichen braucht man?
|
6 | lcd_puts( " " + strlen( tempstr ) );
|
7 | lcd_puts( tempstr );
|
Wenn du aber mit Pointern noch auf Kriegsfuss stehst, ist wahrscheinlich
die Schleifenmethode für dich besser geeignet. Acch deshalb weil die
Stringlänge in " " mit der gewünschten Feldbreite korrespondieren
muss. Wenn man den Trick erst mal durchschaut hat, ist er ganz simpel,
aber er ist für einen Neuling nicht leicht zu durchschauen.