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 » |