Allegro C++ - Milionerzy i dziwne wyniki

Allegro C++ - Milionerzy i dziwne wyniki
LA
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 5 lat
  • Postów:51
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:

Kopiuj
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(); 
ST
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 11 lat
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!
LA
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 5 lat
  • Postów:51
0

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

ST
Tak, użyć debuggera.
ZJ
  • Rejestracja:około 14 lat
  • Ostatnio:około 12 lat
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
Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:9 dni
  • Postów:2512
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

Kopiuj
int & a

zamiast int a

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

Pozdrawiam.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.