Allegro C++ - Milionerzy i dziwne wyniki

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(); 
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ł.

0

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

0

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

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

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.

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