Oppure

Loading
14/07/09 18:27
duncan757
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:
/* Gioco della roulette scritto da duncan757*/ 
 
  
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

float soldi = 100.00; 

int numero = -1; 
char colore = '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:
/* Gioco della roulette scritto da duncan757*/ 
 
  
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

float soldi = 100.00; 

int numero = -1; 
char colore = '{parsed_message}'; 
char tipo = '{parsed_message}'; 
float soldi_puntata[8] = {0}; 
float puntata_tot = 0;  
float punta_soldi(float x) 
{ 
  while(1) { 
     printf("Soldi da puntare: "); 
     scanf("%f", &x); 
     if ( (puntata_tot + x) > soldi ) 
            printf("Impossibile, non si dispone di tutti questi soldi .\n"); 
     else if ( x == -1 ) { x = 0; break; } 
     else if ( x <= 0 ) 
              printf("Impossibile puntare una cifra simile.\n"); 
     else break; 
 } 
 return x; 
} 

int puntata_gioco(void) 
{ 
    int scelta, i; 
    
    puntata_tot = 0; 
    for ( i = 1; i < 8; ++i) 
           puntata_tot += soldi_puntata[i]; 
    soldi_puntata[0] = 0; 
    
    printf("----------------------------------------------------------\n" 
           "----------------------------------------------------------\n" 
           "\n" 
           "                            Soldi disponibili:% .2f\n" 
           "                            Soldi puntati:    % .2f\n" 
           "\n" 
           "    1 - Punta su un numero\n" 
           "    2 - Punta sul nero\n" 
           "    3 - Punta sul rosso\n" 
           "    4 - Punta sul pari\n" 
           "    5 - Punta sul dispari\n" 
           "    9 - Esci.\n" 
           "    0 - Gioca.\n" 
           "\n" 
           "     Numero della scelta: ", soldi, puntata_tot); 
    scanf("%d", &scelta); 
    switch(scelta) { 
      case 1: printf("Numero su cui puntare: "); 
              scanf("%d", &numero); 
              soldi_puntata[1] = punta_soldi(soldi_puntata[0]); 
              break; 
      case 2: soldi_puntata[2] += punta_soldi(soldi_puntata[0]); 
              colore = 'n'; 
              break; 
      case 3: soldi_puntata[3] += punta_soldi(soldi_puntata[0]); 
              colore = 'r';              
              break; 
      case 4: soldi_puntata[4] += punta_soldi(soldi_puntata[0]); 
              tipo = 'p'; 
              break; 
      case 5: soldi_puntata[5] += punta_soldi(soldi_puntata[0]); 
              tipo = 'd'; 
              break; 
      case 9: exit(1); 
      case 0: return 0; 
      default: printf("Scelta non valida.\n\n"); 
               break; 
   } 
   printf("\n"); 
   puntata_gioco(); 
} 

int gira_roulette(void) 
{ 
    int numero_estratto[2] = { (rand() % 37) + 1, ((rand() % 10) + 1) % 2 }; 
    int i; 
    float differenza = soldi; 
    
    
    printf("\n\aNumero estratto: "); 
    if ( numero_estratto[0] == 37 ) printf("00"); 
    else { 
          if ( numero_estratto[1] == 0 ) printf("%d Rosso", numero_estratto[0]); 
          else printf("%d Nero", numero_estratto[0]); 
    } 
    /* Controllo il colore */ 
    if ( colore == 'n' ) { 
         if ( numero_estratto[1] == 1 ) 
              soldi += soldi_puntata[2]; 
         else soldi -= soldi_puntata[2]; 
    } 
    else if ( colore == 'r' ) { 
         if ( numero_estratto[1] == 0 ) 
              soldi += soldi_puntata[3]; 
         else soldi -= soldi_puntata[3]; 
    } 
    
    /* Controllo il numero */ 
    if ( numero_estratto[0] == 37 ) 
         soldi = 0; 
    else { 
           if ( numero_estratto[0] == numero ) 
                soldi += soldi_puntata[1]; 
           else soldi -= soldi_puntata[1]; 
    } 
    
    /* Controllo se è pari o dispari */ 
    if ( tipo == 'p' ) { 
         if ((numero_estratto[0] % 2) == 0) 
             soldi += soldi_puntata[4]; 
         else soldi -= soldi_puntata[4]; 
    } 
    else if ( tipo == 'd' ) { 
         if ((numero_estratto[0] % 2) == 1) 
             soldi += soldi_puntata[5]; 
         else soldi -= soldi_puntata[5]; 
    } 
    
     printf("\n\nTotale "); 
    differenza -= soldi; 
    if ( differenza < 0 ) { 
         differenza *= -1; 
         printf("guadagno: % .2f", differenza); 
    } 
    else if ( differenza == 0 ) 
         printf("nessun guadagno."); 
    else printf("perdita: % .2f", differenza); 
    
    printf("\n\n\n"); 
    /* Resetto le puntate precedenti */ 
    for ( i = 0; i < 8; ++i ) 
          soldi_puntata[i] = 0; 
}    

int main(void) 
{ 
    srand(time(NULL)); 
    printf("[ Gioco della roulette | Autore: duncan757 } \n"); 
    while(1) { 
    puntata_gioco(); 
    gira_roulette(); 
    } 
} 
'; char tipo = '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:
/* Gioco della roulette scritto da duncan757*/ 
 
  
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

float soldi = 100.00; 

int numero = -1; 
char colore = '{parsed_message}'; 
char tipo = '{parsed_message}'; 
float soldi_puntata[8] = {0}; 
float puntata_tot = 0;  
float punta_soldi(float x) 
{ 
  while(1) { 
     printf("Soldi da puntare: "); 
     scanf("%f", &x); 
     if ( (puntata_tot + x) > soldi ) 
            printf("Impossibile, non si dispone di tutti questi soldi .\n"); 
     else if ( x == -1 ) { x = 0; break; } 
     else if ( x <= 0 ) 
              printf("Impossibile puntare una cifra simile.\n"); 
     else break; 
 } 
 return x; 
} 

int puntata_gioco(void) 
{ 
    int scelta, i; 
    
    puntata_tot = 0; 
    for ( i = 1; i < 8; ++i) 
           puntata_tot += soldi_puntata[i]; 
    soldi_puntata[0] = 0; 
    
    printf("----------------------------------------------------------\n" 
           "----------------------------------------------------------\n" 
           "\n" 
           "                            Soldi disponibili:% .2f\n" 
           "                            Soldi puntati:    % .2f\n" 
           "\n" 
           "    1 - Punta su un numero\n" 
           "    2 - Punta sul nero\n" 
           "    3 - Punta sul rosso\n" 
           "    4 - Punta sul pari\n" 
           "    5 - Punta sul dispari\n" 
           "    9 - Esci.\n" 
           "    0 - Gioca.\n" 
           "\n" 
           "     Numero della scelta: ", soldi, puntata_tot); 
    scanf("%d", &scelta); 
    switch(scelta) { 
      case 1: printf("Numero su cui puntare: "); 
              scanf("%d", &numero); 
              soldi_puntata[1] = punta_soldi(soldi_puntata[0]); 
              break; 
      case 2: soldi_puntata[2] += punta_soldi(soldi_puntata[0]); 
              colore = 'n'; 
              break; 
      case 3: soldi_puntata[3] += punta_soldi(soldi_puntata[0]); 
              colore = 'r';              
              break; 
      case 4: soldi_puntata[4] += punta_soldi(soldi_puntata[0]); 
              tipo = 'p'; 
              break; 
      case 5: soldi_puntata[5] += punta_soldi(soldi_puntata[0]); 
              tipo = 'd'; 
              break; 
      case 9: exit(1); 
      case 0: return 0; 
      default: printf("Scelta non valida.\n\n"); 
               break; 
   } 
   printf("\n"); 
   puntata_gioco(); 
} 

int gira_roulette(void) 
{ 
    int numero_estratto[2] = { (rand() % 37) + 1, ((rand() % 10) + 1) % 2 }; 
    int i; 
    float differenza = soldi; 
    
    
    printf("\n\aNumero estratto: "); 
    if ( numero_estratto[0] == 37 ) printf("00"); 
    else { 
          if ( numero_estratto[1] == 0 ) printf("%d Rosso", numero_estratto[0]); 
          else printf("%d Nero", numero_estratto[0]); 
    } 
    /* Controllo il colore */ 
    if ( colore == 'n' ) { 
         if ( numero_estratto[1] == 1 ) 
              soldi += soldi_puntata[2]; 
         else soldi -= soldi_puntata[2]; 
    } 
    else if ( colore == 'r' ) { 
         if ( numero_estratto[1] == 0 ) 
              soldi += soldi_puntata[3]; 
         else soldi -= soldi_puntata[3]; 
    } 
    
    /* Controllo il numero */ 
    if ( numero_estratto[0] == 37 ) 
         soldi = 0; 
    else { 
           if ( numero_estratto[0] == numero ) 
                soldi += soldi_puntata[1]; 
           else soldi -= soldi_puntata[1]; 
    } 
    
    /* Controllo se è pari o dispari */ 
    if ( tipo == 'p' ) { 
         if ((numero_estratto[0] % 2) == 0) 
             soldi += soldi_puntata[4]; 
         else soldi -= soldi_puntata[4]; 
    } 
    else if ( tipo == 'd' ) { 
         if ((numero_estratto[0] % 2) == 1) 
             soldi += soldi_puntata[5]; 
         else soldi -= soldi_puntata[5]; 
    } 
    
     printf("\n\nTotale "); 
    differenza -= soldi; 
    if ( differenza < 0 ) { 
         differenza *= -1; 
         printf("guadagno: % .2f", differenza); 
    } 
    else if ( differenza == 0 ) 
         printf("nessun guadagno."); 
    else printf("perdita: % .2f", differenza); 
    
    printf("\n\n\n"); 
    /* Resetto le puntate precedenti */ 
    for ( i = 0; i < 8; ++i ) 
          soldi_puntata[i] = 0; 
}    

int main(void) 
{ 
    srand(time(NULL)); 
    printf("[ Gioco della roulette | Autore: duncan757 } \n"); 
    while(1) { 
    puntata_gioco(); 
    gira_roulette(); 
    } 
} 
'; float soldi_puntata[8] = {0}; float puntata_tot = 0; float punta_soldi(float x) { while(1) { printf("Soldi da puntare: "); scanf("%f", &x); if ( (puntata_tot + x) > soldi ) printf("Impossibile, non si dispone di tutti questi soldi .\n"); else if ( x == -1 ) { x = 0; break; } else if ( x <= 0 ) printf("Impossibile puntare una cifra simile.\n"); else break; } return x; } int puntata_gioco(void) { int scelta, i; puntata_tot = 0; for ( i = 1; i < 8; ++i) puntata_tot += soldi_puntata[i]; soldi_puntata[0] = 0; printf("----------------------------------------------------------\n" "----------------------------------------------------------\n" "\n" " Soldi disponibili:% .2f\n" " Soldi puntati: % .2f\n" "\n" " 1 - Punta su un numero\n" " 2 - Punta sul nero\n" " 3 - Punta sul rosso\n" " 4 - Punta sul pari\n" " 5 - Punta sul dispari\n" " 9 - Esci.\n" " 0 - Gioca.\n" "\n" " Numero della scelta: ", soldi, puntata_tot); scanf("%d", &scelta); switch(scelta) { case 1: printf("Numero su cui puntare: "); scanf("%d", &numero); soldi_puntata[1] = punta_soldi(soldi_puntata[0]); break; case 2: soldi_puntata[2] += punta_soldi(soldi_puntata[0]); colore = 'n'; break; case 3: soldi_puntata[3] += punta_soldi(soldi_puntata[0]); colore = 'r'; break; case 4: soldi_puntata[4] += punta_soldi(soldi_puntata[0]); tipo = 'p'; break; case 5: soldi_puntata[5] += punta_soldi(soldi_puntata[0]); tipo = 'd'; break; case 9: exit(1); case 0: return 0; default: printf("Scelta non valida.\n\n"); break; } printf("\n"); puntata_gioco(); } int gira_roulette(void) { int numero_estratto[2] = { (rand() % 37) + 1, ((rand() % 10) + 1) % 2 }; int i; float differenza = soldi; printf("\n\aNumero estratto: "); if ( numero_estratto[0] == 37 ) printf("00"); else { if ( numero_estratto[1] == 0 ) printf("%d Rosso", numero_estratto[0]); else printf("%d Nero", numero_estratto[0]); } /* Controllo il colore */ if ( colore == 'n' ) { if ( numero_estratto[1] == 1 ) soldi += soldi_puntata[2]; else soldi -= soldi_puntata[2]; } else if ( colore == 'r' ) { if ( numero_estratto[1] == 0 ) soldi += soldi_puntata[3]; else soldi -= soldi_puntata[3]; } /* Controllo il numero */ if ( numero_estratto[0] == 37 ) soldi = 0; else { if ( numero_estratto[0] == numero ) soldi += soldi_puntata[1]; else soldi -= soldi_puntata[1]; } /* Controllo se è pari o dispari */ if ( tipo == 'p' ) { if ((numero_estratto[0] % 2) == 0) soldi += soldi_puntata[4]; else soldi -= soldi_puntata[4]; } else if ( tipo == 'd' ) { if ((numero_estratto[0] % 2) == 1) soldi += soldi_puntata[5]; else soldi -= soldi_puntata[5]; } printf("\n\nTotale "); differenza -= soldi; if ( differenza < 0 ) { differenza *= -1; printf("guadagno: % .2f", differenza); } else if ( differenza == 0 ) printf("nessun guadagno."); else printf("perdita: % .2f", differenza); printf("\n\n\n"); /* Resetto le puntate precedenti */ for ( i = 0; i < 8; ++i ) soldi_puntata[i] = 0; } int main(void) { srand(time(NULL)); printf("[ Gioco della roulette | Autore: duncan757 } \n"); while(1) { puntata_gioco(); gira_roulette(); } }
aaa
14/07/09 18:37
theprogrammer
Aggiungi una

while(!getchar()) ;

dopo la

scanf("%d", &scelta);
aaa
14/07/09 18:46
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:
aaa
14/07/09 18:48
theprogrammer
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 ...
aaa
14/07/09 18:53
duncan757
che sono un nOOb e non so programmare!!!
aaa
14/07/09 18:55
theprogrammer
Postato originariamente da duncan757:

che sono un nOOb e non so programmare!!!


E come l'hai scritto quel programma?
aaa
14/07/09 18:58
duncan757
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.
aaa
14/07/09 19:09
theprogrammer
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 ...
aaa