Allegro C++ - Milionerzy i dziwne wyniki

2011-10-08 20:38
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
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
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
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
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

Liczba odpowiedzi na stronę

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