Forum: PC-Programmierung Printf array rückwärts


von beginner (Gast)


Lesenswert?

Hallo,
ich möchte ein Array rückwärts ausgeben
1
    for(uint8_t x=max; x>=0; x--)
2
    {
3
        printf("0x%02X  ", temp[x]);
4
    }

max ist die Anzahl von elementen in temp.

Das Problem ist, dass die Schleife nicht aufhört. Der anfang ist 
richtig, dann hört es aber nie auf.

von uff basse (Gast)


Lesenswert?

beginner schrieb:
> max ist die Anzahl von elementen in temp.

Wenn das so ist dann musst du mit max-1 anfangen auszugeben.

von Teo D. (teoderix)


Lesenswert?

Unsigned INT wird nun mal NIEMALS kleiner NULL!

von Rolf M. (rmagnus)


Lesenswert?

beginner schrieb:
> Das Problem ist, dass die Schleife nicht aufhört.

Kann sie prinzipbedingt nicht.

beginner schrieb:
> for(uint8_t x=max; x>=0; x--)

Ein uint8_t ist immer >=0. Das geht gar nicht anders. Also ist das eine 
Endlosschleife.

von Tom K. (ez81)


Lesenswert?

Wenn man mit -Wextra compiliert, liefert gcc die ausführliche Begründung 
als Warnung.

von Experte (Gast)


Lesenswert?

"unsigned" ist eine Quelle vieler (subtiler) Fehler. Nach Möglichkeit 
immer vermeiden.

von PittyJ (Gast)


Lesenswert?

Teo D. schrieb:
> Unsigned INT wird nun mal NIEMALS kleiner NULL!

Yo, darauf bin auch auch schon mal ringefallen. Also dort lieber int 
nehmen!

Bei Indizes und aufsteigenden Schleifen nehme ich gerne unsigned. Aber 
bei absteigenden Schleifen geht das nicht.

von beginner (Gast)


Lesenswert?

Teo D. schrieb:
> Unsigned INT wird nun mal NIEMALS kleiner NULL!

Ja, da habt ihr natürlich recht. Das habe ich nicht bedacht :( .

Besten Dank

von Martin B. (ratazong)


Lesenswert?

> Bei Indizes und aufsteigenden Schleifen nehme ich gerne unsigned. Aber
> bei absteigenden Schleifen geht das nicht.

Gehen tut es schon, aber unschön:

for(n=8;n<9;n--) printf("%d %c\n",n,ttt[n]);

gibt das array ttt[8] rückwärts aus

von Teo D. (teoderix)


Lesenswert?

Martin B. schrieb:
> Gehen tut es schon, aber unschön:
>
> for(n=8;n<9;n--) printf("%d %c\n",n,ttt[n]);
>
> gibt das array ttt[8] rückwärts aus

Aber auf nem 8Bitter, immer noch besser als ne 16Bit-Var zu bemühen, 
wenn's Not tut.

von PittyJ (Gast)


Lesenswert?

Martin B. schrieb:
>> Bei Indizes und aufsteigenden Schleifen nehme ich gerne
> unsigned. Aber
>> bei absteigenden Schleifen geht das nicht.
>
> Gehen tut es schon, aber unschön:
>
> for(n=8;n<9;n--) printf("%d %c\n",n,ttt[n]);
>
> gibt das array ttt[8] rückwärts aus

Gehen tut das so. Ist aber nicht selbsterklärend und verständlich. Mehr 
etwas für
https://www.ioccc.org/

von foobar (Gast)


Lesenswert?

Das "rückwärts"-Äquivalent von
1
   for (unsigned i=0; i<N; i++) ...
ist
1
   for (unsigned i=N; i-->0;) ..
Insb ist in dem Schleifenkörper i zwischen 0 und N-1, nie N.

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.