Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema programma c++
Forum - C/C++ - Problema programma c++

Avatar
duncan757 (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/07/2009

Segnala al moderatore
Postato alle 20:27
Martedì, 14/07/2009
Salve a tutti.
Ho appena creato questo programma che simula il gioco della roulette. Il gioco va e funziona ma ha un problema: se inserisco anzichè un numero una lettera il gioco si impalla e va in loop. Come lo risolvo?

ecco il programma:
Codice sorgente - presumibilmente C++

  1. /* Gioco della roulette scritto da duncan757*/
  2.  
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7.  
  8. float soldi = 100.00;
  9.  
  10. int numero = -1;
  11. char colore = '\0';
  12. char tipo = '\0';
  13. float soldi_puntata[8] = {0};
  14. float puntata_tot = 0;  
  15. float punta_soldi(float x)
  16. {
  17.   while(1) {
  18.      printf("Soldi da puntare: ");
  19.      scanf("%f", &x);
  20.      if ( (puntata_tot + x) > soldi )
  21.             printf("Impossibile, non si dispone di tutti questi soldi .\n");
  22.      else if ( x == -1 ) { x = 0; break; }
  23.      else if ( x <= 0 )
  24.               printf("Impossibile puntare una cifra simile.\n");
  25.      else break;
  26.  }
  27.  return x;
  28. }
  29.  
  30. int puntata_gioco(void)
  31. {
  32.     int scelta, i;
  33.    
  34.     puntata_tot = 0;
  35.     for ( i = 1; i < 8; ++i)
  36.            puntata_tot += soldi_puntata[i];
  37.     soldi_puntata[0] = 0;
  38.    
  39.     printf("----------------------------------------------------------\n"
  40.            "----------------------------------------------------------\n"
  41.            "\n"
  42.            "                            Soldi disponibili:% .2f\n"
  43.            "                            Soldi puntati:    % .2f\n"
  44.            "\n"
  45.            "    1 - Punta su un numero\n"
  46.            "    2 - Punta sul nero\n"
  47.            "    3 - Punta sul rosso\n"
  48.            "    4 - Punta sul pari\n"
  49.            "    5 - Punta sul dispari\n"
  50.            "    9 - Esci.\n"
  51.            "    0 - Gioca.\n"
  52.            "\n"
  53.            "     Numero della scelta: ", soldi, puntata_tot);
  54.     scanf("%d", &scelta);
  55.     switch(scelta) {
  56.       case 1: printf("Numero su cui puntare: ");
  57.               scanf("%d", &numero);
  58.               soldi_puntata[1] = punta_soldi(soldi_puntata[0]);
  59.               break;
  60.       case 2: soldi_puntata[2] += punta_soldi(soldi_puntata[0]);
  61.               colore = 'n';
  62.               break;
  63.       case 3: soldi_puntata[3] += punta_soldi(soldi_puntata[0]);
  64.               colore = 'r';              
  65.               break;
  66.       case 4: soldi_puntata[4] += punta_soldi(soldi_puntata[0]);
  67.               tipo = 'p';
  68.               break;
  69.       case 5: soldi_puntata[5] += punta_soldi(soldi_puntata[0]);
  70.               tipo = 'd';
  71.               break;
  72.       case 9: exit(1);
  73.       case 0: return 0;
  74.       default: printf("Scelta non valida.\n\n");
  75.                break;
  76.    }
  77.    printf("\n");
  78.    puntata_gioco();
  79. }
  80.  
  81. int gira_roulette(void)
  82. {
  83.     int numero_estratto[2] = { (rand() % 37) + 1, ((rand() % 10) + 1) % 2 };
  84.     int i;
  85.     float differenza = soldi;
  86.    
  87.    
  88.     printf("\n\aNumero estratto: ");
  89.     if ( numero_estratto[0] == 37 ) printf("00");
  90.     else {
  91.           if ( numero_estratto[1] == 0 ) printf("%d Rosso", numero_estratto[0]);
  92.           else printf("%d Nero", numero_estratto[0]);
  93.     }
  94.     /* Controllo il colore */
  95.     if ( colore == 'n' ) {
  96.          if ( numero_estratto[1] == 1 )
  97.               soldi += soldi_puntata[2];
  98.          else soldi -= soldi_puntata[2];
  99.     }
  100.     else if ( colore == 'r' ) {
  101.          if ( numero_estratto[1] == 0 )
  102.               soldi += soldi_puntata[3];
  103.          else soldi -= soldi_puntata[3];
  104.     }
  105.    
  106.     /* Controllo il numero */
  107.     if ( numero_estratto[0] == 37 )
  108.          soldi = 0;
  109.     else {
  110.            if ( numero_estratto[0] == numero )
  111.                 soldi += soldi_puntata[1];
  112.            else soldi -= soldi_puntata[1];
  113.     }
  114.    
  115.     /* Controllo se è pari o dispari */
  116.     if ( tipo == 'p' ) {
  117.          if ((numero_estratto[0] % 2) == 0)
  118.              soldi += soldi_puntata[4];
  119.          else soldi -= soldi_puntata[4];
  120.     }
  121.     else if ( tipo == 'd' ) {
  122.          if ((numero_estratto[0] % 2) == 1)
  123.              soldi += soldi_puntata[5];
  124.          else soldi -= soldi_puntata[5];
  125.     }
  126.    
  127.      printf("\n\nTotale ");
  128.     differenza -= soldi;
  129.     if ( differenza < 0 ) {
  130.          differenza *= -1;
  131.          printf("guadagno: % .2f", differenza);
  132.     }
  133.     else if ( differenza == 0 )
  134.          printf("nessun guadagno.");
  135.     else printf("perdita: % .2f", differenza);
  136.    
  137.     printf("\n\n\n");
  138.     /* Resetto le puntate precedenti */
  139.     for ( i = 0; i < 8; ++i )
  140.           soldi_puntata[i] = 0;
  141. }    
  142.  
  143. int main(void)
  144. {
  145.     srand(time(NULL));
  146.     printf("[ Gioco della roulette | Autore: duncan757 } \n");
  147.     while(1) {
  148.     puntata_gioco();
  149.     gira_roulette();
  150.     }
  151. }


PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 20:37
Martedì, 14/07/2009
Aggiungi una

while(!getchar()) ;

dopo la

scanf("%d", &scelta);


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
duncan757 (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/07/2009

Segnala al moderatore
Postato alle 20:46
Martedì, 14/07/2009
ok grazie! Però mi ha risolto il problema solo al primo passaggio. ma poi si ripresenta quando mi chiede il numero da puntare o i soldi da puntare!!! :yup::doubt:

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 20:48
Martedì, 14/07/2009
Testo quotato

Postato originariamente da duncan757:

ok grazie! Però mi ha risolto il problema solo al primo passaggio. ma poi si ripresenta quando mi chiede il numero da puntare o i soldi da puntare!!! :yup::doubt:



E cosa ne deduci ... ?

Pensaci ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
duncan757 (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/07/2009

Segnala al moderatore
Postato alle 20:53
Martedì, 14/07/2009
che sono un nOOb e non so programmare!!!

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 20:55
Martedì, 14/07/2009
Testo quotato

Postato originariamente da duncan757:

che sono un nOOb e non so programmare!!!  



E come l'hai scritto quel programma?


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
duncan757 (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/07/2009

Segnala al moderatore
Postato alle 20:58
Martedì, 14/07/2009
con taaanta pazienza (e il mio prof). E non conto più gli errori. Solo che ora pensavo di aver finalmente terminato la fatica ma "per caso" inserisco una lettera e BUM! Non capisco perchè entri in loop comunque.

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:09
Martedì, 14/07/2009
Testo quotato

Postato originariamente da duncan757:

Non capisco perchè entri in loop comunque.



E' un problema della scanf ... osserva dove utilizzi la scanf e cosa ti ho fatto aggiungere per eliminare il problema ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
duncan757 (Normal User)
Newbie


Messaggi: 5
Iscritto: 14/07/2009

Segnala al moderatore
Postato alle 21:16
Martedì, 14/07/2009
Ah si ho capito! in pratica la funzione while(!getchar()) ; fa in modo che non venga mostrato in output ciò che digito se è un carattere e quindi una scelta non valida? Ora l'ho inserito sotto la scanf("%f") e va.

PM Quote