Ne mogu da utvrdim u cemu je problem

Ne mogu da utvrdim u cemu je problem

offline
  • Pridružio: 11 Apr 2012
  • Poruke: 98

Evo mucim muku sa ovim programom vec neko vreme...radi se o programu koji treba da deli random karte...radi normalno i kao sto ocekujem ali posle veceg broja ponavljanja pojavi se bag...

#include <iostream> #include <cstring> #include <cmath> #include <cstdlib> #include <ctime> using namespace std; void izvuci_kartu(); int random_broj(int x); int prva_slobodna(int g); int brojkarata=52; char* redna_karta[13]={"as","dva","tri","cetri","pet","sest","sedam","osam","devet","deset","zandar","dama","kralj"}; char* znak_karte[4]={"herc","karo","pik","tref"}; bool spil[52]; int main() { int n; srand(time(NULL)); cout << "Koliko karata zelite da izvucete (0 za izlaz): " << endl; while(true) { cout << endl; cin >> n; if (n==0) break; for (int i=0;i<n;i++) izvuci_kartu(); } return 0; } void izvuci_kartu() { int znk,br,n,x; n=random_broj(brojkarata--); if (brojkarata==0) {     brojkarata=52;     for (int l=0;l<52;l++) spil[l]=false;     cout << "---------------------------" << endl << "Ponovo mesam" << endl << "---------------------------" << endl; } x=prva_slobodna(n); br= x % 13; znk=x / 13; cout << redna_karta[br] << " - " << znak_karte[znk] << endl; } int random_broj(int x){ return rand() % x; } int prva_slobodna(int g) { int o=-1; g++; while (g-- > 0) {     o++;     while (spil[o]) o++; } spil[o]=true; return o; }



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Més que un club
  • Glavni vokal @ Harpun
  • Pridružio: 27 Feb 2009
  • Poruke: 3898
  • Gde živiš: Novi Sad,Klisa

A bag se ogleda u cemu?



offline
  • Pridružio: 11 Apr 2012
  • Poruke: 98

Nakon veceg broja izvlacenja jednostavno se ukoci i nece da nastavi da radi


offline
  • Més que un club
  • Glavni vokal @ Harpun
  • Pridružio: 27 Feb 2009
  • Poruke: 3898
  • Gde živiš: Novi Sad,Klisa

Mozda se prepuni bafer. Dodaj sledecu liniju u kod.
Include-uj cstdio i dodaj sledecu liniju:

fflush(stdout);

offline
  • Pridružio: 11 Apr 2012
  • Poruke: 98

NIx Car ::Mozda se prepuni bafer. Dodaj sledecu liniju u kod.
Include-uj cstdio i dodaj sledecu liniju:

fflush(stdout);


Da li na nekom odredjenom mestu treba da se doda ta linija koda? Ako ne onda nije u tome problem jer sam je stavio na pocetak programa (na pocetak main funkcije) i idalje ima isti bag...
Primetio sam da se uvek pokvari na istom mestu jer pocne da ispisuje kartu koja pocinje sa "as - "

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Nemoj da mixujes C I/O funkcije sa C++ I/O strimovima!

Ne valja ti algo u "prva_slobodna" funkciji, dok vezbas za debagovanje mozes koristiti recimo assert funkciju, pogotovo tamo gde indexiras neki niz:

#include <cassert> ... int prva_slobodna(int g) { int o=-1; g++; while (g-- > 0) {     o++;     while (spil[o]) o++; } // out of bounds check assert( o >= 0 ); assert( o < 52 ); spil[o]=true; return o; }

offline
  • Pridružio: 11 Apr 2012
  • Poruke: 98

Uspeo sam da popravim kod Smile hvala morando
Bio si upravu...postavio sam assert funkciju i video da je greska u tome sto ta funkcija vraca vrednost preko 51, a to nastaje zato sto sam ja postavio da mi postavi vrednosti niza spil na false pre nego sto se izvrsi funkcija prva_slobodna...

Nisam ni znao za assert...hvala za savet koristicu je ubuduce Smile

Ko je trenutno na forumu
 

Ukupno su 1164 korisnika na forumu :: 53 registrovanih, 6 sakrivenih i 1105 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: _Rade, Areal84, Atomski čoban, babaroga, Bobrock1, Boris90, comi_pfc, Dimitrije Paunovic, djboj, Djokislav, Dorcolac, flash12, FOX, ginjica, gomago, havoc995, Insan, jaeger, krkalon, Kubovac, Levi, Lošmi, M1los, madza, mercedesamg, Metanoja, Mi lao shu, MiG-29M2, milenko crazy north, milutin134, Mixelotti, mnn2, nenad81, pacika, Parker, randja26, Rogan33, royst33, S2M, samsung, Sančo, sasa87, slonic_tonic, Smiljke, solic, Srky Boy, Srle993, Steeeefan, Vatreni Zmaj, vladaa012, wizzardone, YU-UKI, zodiac94