Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

instrukcja cout zmienia wynik działania. Dlaczego?

Ostatnio zmodyfikowano 2013-04-30 16:34
Autor Wiadomość
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:
C/C++
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++;
            }
        }
        //cout<<"";
    }
    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?
P-81485
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.
P-81610
« 1 »
  Strona 1 z 1