Allegro C++ - Milionerzy i dziwne wyniki

2011-10-08 20:38

Rejestracja: 9 lat temu

Ostatnio: 1 miesiąc temu

0

Witam! Robię grę "Milionerzy", mam problem przy stworzeniu koła ratunkowego "Pytanie do publiczności". Funkcja losująca poprawność odpowiedzi działa, lecz gdy chce te wyniki wyświetlić za pomocą allegro wartości biorą się nie wiadomo skąd. Oto kod:

funkcja

void pytanie::Publicznosc(int a, int b, int c, int d)
 {
  int pr[3], odp;
  pr[0]=rand()%25;
  pr[1]=rand()%25;
  pr[2]=rand()%25;
  int max=pr[0]+pr[1];
  max=max+pr[2];
  max=100-max;
  switch(podp)
    {
          case 'a': odp=0; break;
          case 'b': odp=1; break;
          case 'c': odp=2; break;
          case 'd': odp=3; break;
          } 
  int procenty[4], j=0;
  for(int i=0; i<=3; i++)
  {
          if(odp==i)
           {
             procenty[i]=max;
             }
             else
             {
                 procenty[i]=pr[j];
                 j++;
                 }
   }
  a=procenty[0];
  b=procenty[1];
  c=procenty[2];
  d=procenty[3];
 }  

i wywolanie

int a,b,c,d;
                  que[i].publicznosc(a,b,c,d);
                  rectfill( screen, 161, 55, 400, 263, makecol( 0, 0, 20 ) );
                  rectfill( screen, 171, 65, 390, 253, makecol( 0, 0, 50 ) );
                  textout_ex( screen, font, "Glosowanie publicznosci:", 183, 78, makecol( 255, 255, 255 ), - 1 );
                  textprintf_ex( screen, font, 200, 100, makecol( 255, 255, 255 ), - 1, "A: %d %d", a );
                  textprintf_ex( screen, font, 200, 115, makecol( 255, 255, 255 ), - 1, "B: %d %d", b );
                  textprintf_ex( screen, font, 200, 130, makecol( 255, 255, 255 ), - 1, "C: %d %d", c );
                  textprintf_ex( screen, font, 200, 145, makecol( 255, 255, 255 ), - 1, "D: %d %d", d );
                  textout_ex( screen, font, "Wcisnij dowolny klawisz", 185, 200, makecol( 255, 255, 255 ), - 1 );
                  textout_ex( screen, font, "by kontynuowac...", 185, 210, makecol( 255, 255, 255 ), - 1 );
                  readkey(); 

Pozostało 580 znaków

2011-10-08 20:44

Rejestracja: 9 lat temu

Ostatnio: 6 lat temu

0

Mistrzu, a popatrz na to co wypisujesz, bo chcesz wypisać "A: %d %d", czyli na przykład: "A: 30 20", a podajesz tylko jeden argument, do tej listy.
Dziwne, że parser nie krzyczał.


Pozdro & poćwicz!

Pozostało 580 znaków

2011-10-10 21:10

Rejestracja: 9 lat temu

Ostatnio: 1 miesiąc temu

0

Po usunięciu jednego %d nadal jest źle. Jakieś inne pomysły?

Tak, użyć debuggera. - stfu 2011-10-10 21:11

Pozostało 580 znaków

2011-10-10 21:14

Rejestracja: 8 lat temu

Ostatnio: 6 lat temu

0

Wróć do podstaw c++, min. przekazywanie parametrów do funkcji.

I wiadomo skąd się biorą wartości, ze stosu.

edytowany 1x, ostatnio: Zjarek, 2011-10-10 21:14

Pozostało 580 znaków

2011-10-11 08:49

Rejestracja: 8 lat temu

Ostatnio: 3 godziny temu

0

Przekazujesz zmienne a,b,c,d do funkcji, zmieniają się w środku, ale tej zmiany "nie widać" poza funkcją. Przyczyną jest to, że przekazujesz obiekty przez wartość. Jeżeli w definicji funkcji użyjesz

int & a

zamiast int a


 czyli przekażesz przez referencję, zadziała to tak jak chcesz. Lepiej jednak gdybyś zwracał strukturę, lub tablicę jako wynik działania funkcji.

Pozdrawiam.

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0