Indeks pętli for przybiera absurdalną wartość przy dekrementacji

0

Dobry wieczór - na początek chciałbym się przywitać ze wszystkimi forumowiczami. Nie znalazłem działu powitalnego, więc zrobię to tutaj, w moim pierwszym temacie. Mam nadzieję, że nie tylko będę tu mógł zasięgnąć pomocy w identyfikacji błędów lecz także sam będę mógł pomóc osobom mniej doświadczonym (rzecz jasna - dopiero gdy sam będę posiadał odpowiednie doświadczenie :)). Przechodząc do właściwego tematu:

user image

Jakim cudem indeks pętli osiąga taką wartość?

Pozdrawiam i z góry dziękuję za pochylenie się nad moim problemem.

1

Następuje underflow i licznik się przekręca.
Tzn. gdy i przyjmie wartość 0, pętla nadal będzie się wykonywać (z racji warunku i >= 0), i właśnie to --i dla i=0 powoduje przekręcenie do 255.

0

Przy zmianie dekrementacji na i-- błąd się nie zmienia, to samo po przeniesieniu jej do nawiasu for(). Czy powinienem zmienić warunek? Jeśli tak, to na jaki?

1

Musiałbyś zmienić warunek na i > 0, albo wyjść ze średniowiecza i nie iterować zmienną z typem liczbowym bez znaku (unsigned).

0

Dziękuję Ci za dosadną i konkretną odpowiedź. Rzeczywiście, umknęło mi dodatkowe niepotrzebne wykonanie pętli przez sknocony warunek. :)

1

Krótko: warunek pętli zawsze będzie spełniony, niezależnie od tego co się dzieje w środku (dlatego będzie się zawsze pętlić). Powód - byte (nieznakowany typ zawsze jest >= 0).

1 użytkowników online, w tym zalogowanych: 0, gości: 1