Witam!
Tak jak w tytule, polecenie cout zmienia dane wyjściowe w funkcji.
Jestem w trakcie tworzenia gry w warcaby, stworzyłem rekurencyjną funkcje która ma na celu podanie największej ilości bić jaka jest możliwa do wykonanie dla aktualnego gracza.
Po sprawdzeniu działania tej funkcji postanowiłem wykomentować z niej wszystkie pomocnicze couty.
Kiedy to zrobiłem funkcja w pewnych sytuacjach zamiast zwrócić 0 ( czyli brak bić ), zwracała 1 ( czyli 1 bicie ).
Odkryłem wtedy że aby funkcja działała poprawnie wystarczy zostawić jeden cout w środku funkcji.
Funkcja jest ustawiona tak aby sprawdzała bicia tylko dla czarnego, na planszy jest to [c], biały to [b].
Aby zrozumieć o co dokładnie mi chodzi należy uruchomić program, następnie wybrać jedną z kilku plansz testowych. Polecam najpierw na klawiaturze wybrać numer 3, jest na nim sytuacja z biciem dla czarnego.
W tym przypadku funkcja prawidłowo zwróci liczbę 1.
Potem należy ponownie włączyć program i wybrać opcje 7, jest to sytuacja w której jest bicie ale dla białego.
Jako że funkcja sprawdza cały czas bicie dla czarnego w tej sytuacji funkcja powinna zwrócić 0, ponieważ bicie dla czarnego jest niemożliwe ze względu na to że po biciu pionek znajdował by się po za planszą.
Mimo tego funkcja zwróci 1.
Ale jeśli w kodzie funkcji, która jest pierwszą funkcją w kodzie i nosi nazwę sprawdzenieIlosciBicia, usuniemy znaczniki "//" przed ostatnim coutem "//cout << bicie_lewo << " " << bicie_prawo << " " << najlepsze_bicie << endl;", po skompilowaniu w przypadku planszy nr 3 dostaniemy 1, a w przypadku nr 7 dostaniemy 0.
Jednym słowem funkcja będzie działała poprawnie.
Link do kodu źródłowego:
http://wklej.org/id/3369474/
Używam codeblocksa, co ciekawe sprawdziłem ten sam kod w devie i tam wszytsko działa normalnie.
Mimo wszystko wolałbym korzystać z codeblocksa więc proszę o pomoc C: