Wątek przeniesiony 2014-02-26 18:38 z C/C++ przez ŁF.

Pętle zagnieżdzone - dziwne zmiana wartości zmiennej.

0

Robie kurs z cpp0x.pl i jestem właśnie na pętlach zagnieżdżonych. Podczas pisania próbnego programu napotkałem rzecz której nie potrafię pojąć.

 
int main()
{
    int slots[2];
    int a = 0;

    for(int i=1; i<=3; i++)
    {
        slots[0] = i;

        for(int j=1; j<=3; j++)
        {
            if(j!=i)
            slots[1] = j;
            else
            continue;
            for(int k=1; k<=3; k++)
            {
                if(k!=j&&k!=i)
                slots[2] = k;
                else
                continue;
                cout<<slots[0]<<slots[1]<<slots[2]<<endl;

            }
        }
    }

    cout<<a;

}

Dlaczego wartość zmiennej "a", której pierwotnie nadałem wartość "0" i nie występuje ani razu w pętli, przy wypisywaniu na ekran ma wartość "1" 0_o (nie zastanawiajcie się na sensem tego programu, to tylko test:D Zmienna ta miała działać jako licznik możliwych kombinacji liczb ale zwracała mi błednę wartości więc usunąłem zapis z kodu głównego który zwiększał wartość zmiennej o 1 za każdym razem gdy pętla dojdzie do końca).

1

słot ma dwa elementy slots[0] i slots[1] zaś slots[2] wyłazi poza zakres i zamazuje zmienną a. Zjawisko powszechnie znane jako mazanie po pamięci.

1

slots[2] = k;

Tutaj nadpisujesz zmienną a, którą kompilator ustawił zaraz za tablicą. Tablice w c++ indeksuje się od 0 więc odwołujesz się do 3 elementu 2 elementowej tablicy.

edit
up szybszy

0

Jezu nie wierze, że tego nie zauważyłem T_T Dziękuje bardzo:)

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