Forum: Compiler & IDEs Schleife programmieren


von Wer suchet (Gast)


Lesenswert?

Hi,
Kann man in C eine for-Schleife die von 0 bis 255 gehen soll 
programmieren, wenn die Schleifen-Variable selber vom Typ unsigned Char 
ist?
for(unsigned char n=0;n <= 255;n++){}
kommt nie zum Ende!!!

von Fred (Gast)


Lesenswert?

Nein, und natürlich terminiert das da oben nie.

Ein unsigned char kann nunmal nur Werte von 0 bis 255 annehmen, welcher 
davon sollte denn größer sein als 255?

von Max W. (max96)


Lesenswert?

Weil deine Zählvariable überläuft und wahrscheinlich wieder bei 0 
startet. Unsigned char geht von 0-255 du zählst aber mit <=255 bis 256. 
Das = muss weg, dann sollte es gehen.

von Fred (Gast)


Lesenswert?

Nicht "wahrscheinlich". Dem ist so.

Und mit "<" wäre ihm auch nicht geholfen, weil er möchte, daß die 
Zählvariable 255 einschließt.

von Uwe S. (de0508)


Lesenswert?

Hallo,

ich würde dann eine Do - While - Schleife verwenden !
1
uint8_t n = 0;
2
do {
3
  // {do some thing}
4
  n++;
5
} while (n != 0);

: Bearbeitet durch User
von Bernhard R. (barnyhh)


Lesenswert?

Wer suchet schrieb:
> Hi,
> Kann man in C eine for-Schleife die von 0 bis 255 gehen soll
> programmieren, wenn die Schleifen-Variable selber vom Typ unsigned Char
> ist?
> for(unsigned char n=0;n <= 255;n++){}
> kommt nie zum Ende!!!

Man kann:
1
...
2
uint8_t erster_durchlauf;
3
uint8_t n;
4
5
for (erster_durchlauf = 1, n = 0; (erster_durchlauf != 0)  || (n != 0); n++) {
6
   erster_durchlauf = 0;
7
   ....
8
}

Bernhard

von Uwe B. (derexponent)


Lesenswert?

@Berhard,

warum so kompliziert :-)
1
  unsigned char n;
2
3
  for(n=0;;n++) {
4
    printf("n=%d\n",n);
5
    if(n==255) break;
6
  }

Gruss Uwe

von Fred (Gast)


Lesenswert?

Warum so kompliziert?

for(unsigned int n=0;n <= 255;n++){} und gut ist.

von mitleser (Gast)


Lesenswert?

Gute Antwort, passt aber leider nicht zur gestellten Frage ;-)

von Dumdi D. (dumdidum)


Lesenswert?

Wie wäre es mit
for(unsigned char n=0;n;n++){}
(natürlich wird angenommen, dass Dein Compiler den 'richtigen' Überlauf 
durchführt)

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Dann wie die Scheife erst garnet betreten, d.h. 0 Durchläufe.

von Betatester (Gast)


Lesenswert?

Fred schrieb:
> Warum so kompliziert?
>
> for(unsigned int n=0;n <= 255;n++){} und gut ist.

Schon wieder der 1. April?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.