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

  1. #include <iostream>
  2. #include <cstring>
  3. #include <cmath>
  4. #include <cstdlib>
  5. #include <ctime>
  6. using namespace std;
  7.  
  8.  
  9. void izvuci_kartu();
  10. int random_broj(int x);
  11. int prva_slobodna(int g);
  12.  
  13. int brojkarata=52;
  14. char* redna_karta[13]={"as","dva","tri","cetri","pet","sest","sedam","osam","devet","deset","zandar","dama","kralj"};
  15. char* znak_karte[4]={"herc","karo","pik","tref"};
  16. bool spil[52];
  17.  
  18.  
  19. int main() {
  20. int n;
  21. srand(time(NULL));
  22.  
  23. cout << "Koliko karata zelite da izvucete (0 za izlaz): " << endl;
  24. while(true) {
  25. cout << endl;
  26. cin >> n;
  27. if (n==0) break;
  28. for (int i=0;i<n;i++) izvuci_kartu();
  29.  
  30. }
  31.  
  32.  
  33. return 0;
  34. }
  35.  
  36.  
  37. void izvuci_kartu() {
  38. int znk,br,n,x;
  39. n=random_broj(brojkarata--);
  40. if (brojkarata==0) {
  41.     brojkarata=52;
  42.     for (int l=0;l<52;l++) spil[l]=false;
  43.     cout << "---------------------------" << endl << "Ponovo mesam" << endl << "---------------------------" << endl;
  44. }
  45. x=prva_slobodna(n);
  46. br= x % 13;
  47. znk=x / 13;
  48. cout << redna_karta[br] << " - " << znak_karte[znk] << endl;
  49. }
  50.  
  51. int random_broj(int x){
  52. return rand() % x;
  53. }
  54.  
  55. int prva_slobodna(int g) {
  56. int o=-1;
  57. g++;
  58. while (g-- > 0) {
  59.     o++;
  60.     while (spil[o]) o++;
  61. }
  62. spil[o]=true;
  63. return o;
  64. }



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:

  1. 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:

  1. 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:

  1. #include <cassert>
  2. ...
  3. int prva_slobodna(int g) {
  4. int o=-1;
  5. g++;
  6. while (g-- > 0) {
  7.     o++;
  8.     while (spil[o]) o++;
  9. }
  10.  
  11. // out of bounds check
  12. assert( o >= 0 );
  13. assert( o < 52 );
  14.  
  15. spil[o]=true;
  16. return o;
  17. }

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 1072 korisnika na forumu :: 81 registrovanih, 14 sakrivenih i 977 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: 1MAP, A.R.Chafee.Jr., airsuba, Apok, Arsenije, Bane san, Bobrock1, bogart81, BraneS, brkan1, Bubimir, darcaud, DavidA, Dejan_vw, dekan.m, dendrit86, draganl, drimer, ekser222, esko_hz, Feller, francis begbie, g_g, glados, havoc995, HrcAk47, Igritelj, Jakonjveliki, jodzula, K-1A, kikisp, KonstantinR, Kordon, krkalon, Kubovac, kunktator, Lazur_01, lima, Litostroton, lord sir giga, M74AB3, marko308, milos97, mir, N.e.m.a.nj.a., Ne doznajem se u oružje, nelezele, novator, Paklenica, pein, ping15, pirke96, pisac12, Prašinar, Prečanin30, PrincipL, RajkoB, Rebel Frank, redstar72, Regrut Boskica, Rothmans, Sale.S, sedan, silikon, superwhy, suton, Szigetwar, Trpe Grozni, Vanderx, VJ, Vlada78, voja64, Vrač, vuksa72, Vzor50, Wehicle, x9, YugoSlav, zdrebac, zombicar153, zrno