instrukcja cout zmienia wynik działania. Dlaczego?
Ostatnio zmodyfikowano 2013-04-30 16:34
radziopoke Temat założony przez niniejszego użytkownika  | 
instrukcja cout zmienia wynik działania. Dlaczego? » 2013-04-29 13:32:36 Dziś chciałem sobie troszkę przypomnieć programowania i stworzyć pewien program. O dziwo napotkałem dość dziwny błąd. Mianowicie wykonanie cout<<""; zmienia mi wynik działań. Metoda która posiada błąd wygląda tak: void C_Board::UzupelnijT() {     short pary[ 200 ];     short maxpar;     short nrpol = 1;     for( int i = 0; i < row; i++ )     {         for( int j = 0; j < col; j++ )         {             tboard[ i ][ j ] = 0;             if(( i > 0 ) and( board[ i - 1 ][ j ] == board[ i ][ j ] ) )             {                 tboard[ i ][ j ] = tboard[ i - 1 ][ j ];             }             if(( j > 0 ) and( board[ i ][ j - 1 ] == board[ i ][ j ] ) )             {                 if( tboard[ i ][ j ] > 0 )                 {                     pary[ maxpar ] = tboard[ i ][ j ];                     pary[ maxpar + 1 ] = tboard[ i ][ j - 1 ];                     maxpar += 2;                 }                 tboard[ i ][ j ] = tboard[ i ][ j - 1 ];             }             if(( tboard[ i ][ j ] == 0 ) and( board[ i ][ j ] != ' ' ) )             {                 tboard[ i ][ j ] = nrpol;                 nrpol++;             }         }              }     for( int par = 0; par < maxpar; par += 2 )     {         for( int i = 0; i < row; i++ )         {             for( int j = 0; j < col; j++ )             {                 if( tboard[ i ][ j ] == pary[ par ] ) { tboard[ i ][ j ] = pary[ par + 1 ]; }             }         }     }     for( int a = 1; a < nrpol; a++ )     {         bool zmniejsz = true;         for( int i = 0; i < row; i++ )         {             for( int j = 0; j < col; j++ )             {                 if( tboard[ i ][ j ] == a )                 {                     tboard[ i ][ j ] = maxt;                     zmniejsz = false;                     poile[ maxt ] ++;                 }             }         }         if( !zmniejsz ) { maxt++; }     } } Jak można zauważyć w pewnym momencie kodu za-komentowane jest cout<<""; Kod daje w takim wypadku poprawne wyniki: Podaj ilosc kolumn: 5 Podaj ilosc rzedow: 5 Podaj 1 rzad:ABBBA Podaj 2 rzad:ABABA Podaj 3 rzad:AAAAA Podaj 4 rzad:ACACA Podaj 5 rzad:ACCCA Kolumn: 5 Rzedow: 5 Plansza:  ABBBA ABABA AAAAA ACACA ACCCA Plansza (cyfrowo): 1|2|2|2|1| 1|2|1|2|1| 1|1|1|1|1| 1|3|1|3|1| 1|3|3|3|1| Kolumn: 5 Rzedow: 5 Plansza:        B B   B B   CBC   CCC   Plansza (cyfrowo): 0|0|0|0|0| 0|0|1|0|0| 0|0|1|0|0| 2|3|2|0|0| 2|2|2|0|0| choć zaniepokoiła mnie jeden drobny błąd w ostatniej planszy cyfrowej (w pierwszej kolumnie 2 i 3 cyfra powinny być inne niż 0). Dlatego chciałem sprawdzić za pomocą cout gdzie pojawia się błąd. Niestety wystarczy, że od komentujemy cout z powyższej metody wyniki się całkowicie psują: Podaj ilosc kolumn: 5 Podaj ilosc rzedow: 5 Podaj 1 rzad:ABBBA Podaj 2 rzad:ABABA Podaj 3 rzad:AAAAA Podaj 4 rzad:ACACA Podaj 5 rzad:ACCCA Kolumn: 5 Rzedow: 5 Plansza:  ABBBA ABABA AAAAA ACACA ACCCA Plansza (cyfrowo): 0|1|1|1|2| 0|1|3|1|2| 0|0|0|0|0| 0|30661|0|0|0| 0|30661|30661|30661|0| Kolumn: 5 Rzedow: 5 Plansza:  A   A A A A AAAAA ACACA ACCCA Plansza (cyfrowo): 0|0|0|0|0| 0|0|1|0|0| 0|0|0|0|0| 0|-1|0|0|0| 0|-1|-1|-1|0| dlaczego cout (które wypisuje pusty ciąg lub nawet gdy próbuje wypisać jakieś dane) podmienia mi dane w tablicy?  | 
 | 
radziopoke Temat założony przez niniejszego użytkownika  | 
» 2013-04-30 16:34:35 Problem rozwiązany.
  Choć męczyłem się z nim od wczoraj. Dziś stwierdziłem, że skoro nikt nie jest w stanie mi pomóc to może problem leży w innej metodzie wywoływanej odrobinę wcześniej. Niestety i tam wstawienie cout powodowało rozwalenie kodu. Wiec szukałem na próżno i tam. Aż jakąś godzinę temu stwierdziłem, ze i tak nic nie stoi na przeszkodzie by powstawiać prawie wszędzie cout-y, które wypiszą mi dane zmiennych i tu przy jednej ze zmiennych ukazała się liczba jaka w ogóle nie powinna tam być wprowadzona. Chodzi dokładnie o zmienną maxpar, która nie dostała na samym początku wartości początkowej, a była tylko inkrementowana. Problem jak widać był na prawdę prosty (ciekawe, że nikt z użytkowników tego forum tego nie zauważył), choć to teraz nie wiem dlaczego wynik tak drastycznie zmieniał się pod wpływem instrukcji cout, ale po tej poprawce wszystko wróciło do normy.  | 
 | 
|  « 1 »  |