Sepp schrieb:
> Hallo,
>
> ich habe ein Problem mit einer Schleife. Ich möchte gerne Werte von 0 -
> 255 durcharbeiten. Dabei ist der Schleifen index ein unsigned int8
> for(uint8_t i = 0; i < 255; i++)
> {
> }
>
> Jedoch komme ich nicht auf den Wert von 255.
Naja, du sagst ja, daß die Schleife nur so lange laufen soll, wie i
kleiner als 255 ist. Somit erreichst du die 255 natürlich nicht.
> Wenn ich i < 256 mach, bin ich in einer Endlosschleife. Gleiches gilt für i
> <= 255
Was ja auch logisch ist, da ein vorzeichenloser 8-Bit-Integer immer
kleiner als 256 und dementsprechend natürlich auch kleiner oder gleich
255 ist. Werte, die deine Schleife beenden würden, kann er also gar
nicht annehmen, daher läuft die Schleife für immer.
Das Problem ist, daß die Schleifenbedingung bei der for-Schleife vor der
Ausführung des Schleifeninhalts geprüft wird. Das führt dazu, daß die 0
zweimal geprüft wird, nämlich einmal beim ersten Durchaluf, wo die
Schleife weiterlaufen soll und einmal beim letzten, wo sie aber
abbrechen soll.
Es gibt zwei mögliche Lösungsansätze:
1. Die zusätzliche Informationen zur Unterscheidung zwischen erstem und
letztem Durchlauf irgendwo unterbringen. Das geht z.B. durch Erweiterung
des Schleifenzählers auf 16 Bit, so daß er nach 255 nicht überläuft.
Eine andere - wenn auch sehr eigenwillige - Möglichkeit ist die von
Norbert.
2. Die Prüfung des Schleifenzählers auf das Ende der Schleife verlagern.
Das geht mit einer for-Schleife aber nicht sinnvoll. Daher die Lösung
von Markus F mit der while-Schleife.