Na początku zainicjalizuj zmienną 'i'.
Wytłumacz proszę jeszcze skąd się wzięły warunki tych pętli do...while (domyslam się, że to rozmiary tablic, jeśli tak to nie rób tak więcej, tylko przesyłaj ich rozmiar w argumencie funkcji - wtedy będzie działało dla tablic o różnych rozmiarach.)
Pomija Ci pierwszy indeks tablicy los. Prześledźmy wykonywanie kodu:
i = śmieci (niezainicjalizowana zmienna, czyli tzw. śmieci - losowe, zwykle duże liczby)
index = 0
poprawnie:
int i = 0, index = 0;
*kod sie wykonuje*
dla: i = 932433(jakieś śmieci), index = 0
if( los[ index ] == i )
cout << "Wylosowana liczba" << index << ": " << tablica[ i ] << endl;
podstawiamy, czyli
if ( los[0] == 932433 )
cout<<... - to sie nie wykona, bo warunek (najprawdopodobniej) sie nie zgadza (najprawdopodobniej, bo może masz pod los[0] liczbe 932433 ;) )
Dalsza część kodu to inkrementacja i (i++) - nadal mało możliwe, że
los[0] == 932434
tak więc tu nic nie wyświetli.
Dopiero po wyjściu z pętli
i = 0;
index++;
Z tym, że teraz pętla wykonuje się dla
i = 0
index = 1 !!
A wiec
if(los[1] == 0/1/2/3/4/5/6/7/8/9) ('i' jest z przedziału od 0 - 9 bo je inkrementujesz pod koniec tej pętli, index = 1)
cout<<cout << "Wylosowana liczba" << index (a index wynosi 1) << ": " << tablica[ i ] << endl;
Dlatego też musisz nadać zmiennej 'i' wartość 0 przy jej deklaracji (czyli zdefiniuj ją)
Na koniec cytat z wiki o śmieciach:
Język C nie inicjalizuje zmiennych lokalnych. Oznacza to, że w nowo zadeklarowanej zmiennej znajdują się śmieci - to, co wcześniej zawierał przydzielony zmiennej fragment pamięci. Aby uniknąć ciężkich do wykrycia błędów, dobrze jest inicjalizować (przypisywać wartość) wszystkie zmienne w momencie zadeklarowania.
|
Napisali o c, ale w c++ też to jest. Jedynie zmienne globalne są zawsze od razu inicjalizowane zerem. :)