Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema int e caratteri speciali C++
Forum - C/C++ - Problema int e caratteri speciali C++

Avatar
Ironman2213 (Normal User)
Newbie


Messaggi: 1
Iscritto: 23/11/2016

Segnala al moderatore
Postato alle 19:11
Mercoledì, 23/11/2016
Salve, ho un problema con il mio programma, ogni volta che viene inserito un numero e/o un carattere speciale nella variabile "diff" il default non lo da come soluzione sbagliata, creando poi successivamente un sacco di errori per poi darlo sbagliato solo al riavvio del while dove si trova. Qualcuno sa dirmi una soluzione ho un modo per far leggere la variabile e dare errore se non è una delle 4 soluzioni accettabili ?

-Grazie in anticipo

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string>
  3. #include <windows.h>
  4. #include <ctime>
  5.  
  6. using namespace std;
  7. int main()
  8. {
  9.         int punteggio;
  10.         int record;
  11.         string scelta;
  12.         scelta = "si";
  13.         punteggio=0;
  14.         record=0;
  15.         while(scelta=="si" )
  16.         {
  17.                 int conta;
  18.             string magg;
  19.             string min;
  20.             int diff;
  21.             int num;
  22.             int numins;
  23.             int poss;
  24.             int giusto;
  25.             diff=0;
  26.             poss=0;
  27.             conta=0;
  28.             giusto=0;
  29.         system("CLS");
  30.             system("color 0a");
  31.             cout<<"Benvenuto nel gioco 'Indovina il numero'                           Punteggio: "<<punteggio<<endl;
  32.             cout<<"Devi indovinare il numero generato tra 0 e 100"<<endl;
  33.             srand((unsigned)time(NULL));
  34.         num=rand() % 100+1;
  35.         cout<<" "<<endl;
  36.         system("PAUSE");
  37.             system("CLS");
  38.             cout<<"";
  39.             cout<<"Scegli la difficolta                                               Punteggio: "<<punteggio<<endl;
  40.             cout<<" 1-Facile (4 possibilita)"<<endl<<" 2-Media (3 possibilita)"<<endl<<" 3-Difficile (2 possibilita)"<<endl<<" 4-Impossibile (1 possibilita)"<<endl;
  41.             cin>>diff;
  42.             system("CLS");
  43.             switch(diff)
  44.             {
  45.                 case (1):
  46.                         poss=4;
  47.                         break;
  48.                 case (2):
  49.                         poss=3;
  50.                         break;
  51.                 case (3):
  52.                         poss=2;
  53.                         break;
  54.                 case (4):
  55.                         poss=1;
  56.                         break;
  57.                 default:
  58.                 {
  59.                         cout<<"Difficolta non valida";
  60.                             Sleep(1000);
  61.                         exit(0);
  62.                         break;
  63.                         }
  64.             }
  65.             cout<<"Difficolta impostata";
  66.             Sleep(1000);
  67.             system("CLS");
  68.            
  69.             while(conta<poss)
  70.             {
  71.                 cout<<"                                                                    Punteggio: "<<punteggio<<endl;
  72.                     cout<<"Ora prova ad indovinare il numero >> ";
  73.                     cin>>numins;
  74.                     if(numins==num)
  75.                     {
  76.                             conta=poss;
  77.                             giusto=1;
  78.                     }
  79.                     else
  80.                     {
  81.                             if(numins<num)
  82.                             {
  83.                                     if(poss==1)
  84.                                             system("CLS");
  85.                                     else
  86.                                     {
  87.                                             cout<<"Ci sei vicino, e' più grande ";
  88.                                         Sleep(1500);
  89.                                         system("CLS");
  90.                                     }
  91.                             }
  92.                             else
  93.                             {
  94.                                     if(poss==1)
  95.                                             system("CLS");
  96.                                     else
  97.                                     {
  98.                                             cout<<"Ci sei vicino, e' più piccolo";
  99.                                     Sleep(1500);
  100.                                         system("CLS");
  101.                                     }
  102.                             }
  103.                     }
  104.                     conta=conta+1;
  105.             }
  106.        
  107.             if(giusto==0)
  108.             {
  109.                     cout<<"Hai terminato le possibilita a disposizione                        Punteggio: "<<punteggio<<endl;
  110.                     cout<<"";
  111.                     cout<<"Il numero era >> "<<num<<endl;
  112.                     cout<<"";
  113.                     cout<<"Il record attuale e' >> "<<record;
  114.                     Sleep(3000);
  115.             }  
  116.             else
  117.             {
  118.                 system("CLS");
  119.                 cout<<"Hai indovinato !                                                    Punteggio: "<<punteggio<<endl;
  120.                 punteggio=punteggio+1;
  121.                 if(record<punteggio)
  122.                 {
  123.                         cout<<"Nuovo record !";
  124.                         record=punteggio;
  125.                         }
  126.                         else
  127.                             cout<<"Il record attuale e' >> "<<record;
  128.                         Sleep(2000);
  129.             }
  130.             system("CLS");
  131.             cout<<"                                                                    Punteggio: "<<punteggio<<endl;
  132.             cout<<"Vuoi rigiocare ? si/no >> ";
  133.             cin>>scelta;
  134.     }
  135.    
  136.     system("CLS");
  137.     cout<<" ";
  138.     cout<<"Arrivedolci";
  139.     Sleep(1000);
  140.     system("CLS");
  141.     cout<<"";
  142.     cout<<"Esposito say :"<<"I TIGLI";
  143.     Sleep(1000);
  144. }


Ultima modifica effettuata da Ironman2213 il 23/11/2016 alle 19:15
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 0:58
Giovedì, 24/11/2016
Magari se spezzassi il programma dividendolo in funzioni/routine più maneggevoli sarebbe più semplice orientarsi, no?

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string>
  3. #include <windows.h>
  4. #include <ctime>
  5. #include <clocale>
  6.  
  7. using namespace std;
  8.  
  9. void vuota_console();
  10. void attendi();
  11. void attendi( time_t ms );
  12. void stampa_riga( char c, size_t n );
  13. void presenta_programma( int punteggio );
  14. int scelta_difficolta( int punteggio );
  15. int gioca( int num, int poss, int punteggio );
  16. void sbagliato( int num, int punteggio, int record );
  17. void corretto( int num, int *punteggio, int *record );
  18. void saluti_e_baci();
  19. bool gioca_ancora( int punteggio );
  20.  
  21. int main() {
  22.     int punteggio = 0;
  23.     int record = 0;
  24.  
  25.     setlocale( LC_ALL, "Italian_italy.1252" );
  26.     srand( (unsigned)time(NULL) );
  27.  
  28.     do {
  29.         int num, poss, giusto;
  30.         string magg, min;
  31.  
  32.         presenta_programma( punteggio );
  33.  
  34.         poss = scelta_difficolta( punteggio );
  35.  
  36.         num = rand()%100 + 1;
  37.         giusto = gioca( num, poss, punteggio );
  38.  
  39.         if( giusto == 0 )
  40.             sbagliato( num, punteggio, record );
  41.         else corretto( num, &punteggio, &record );
  42.     } while( gioca_ancora(punteggio) );
  43.  
  44.     saluti_e_baci();
  45.     return 0;
  46. }
  47.  
  48. void vuota_console() {
  49.     system( "cls" );
  50. }
  51.  
  52. void attendi() {
  53.     cout<<" ";
  54.     system( "PAUSE" );
  55. }
  56.  
  57. void attendi( time_t ms ) {
  58.     Sleep( ms );
  59. }
  60.  
  61. void stampa_riga( char c, size_t n ) {
  62.     while( n-- > 0 ) cout<<c;
  63. }
  64.  
  65. void presenta_programma( int punteggio ) {
  66.     vuota_console();
  67.     system( "color 0a" );
  68.     cout<<" Benvenuto nel gioco 'Indovina il numero'";
  69.     stampa_riga( ' ', 24 );
  70.     cout<<"Punteggio: "<<punteggio<<endl;
  71.     cout<<" Devi indovinare il numero generato tra 0 e 100"<<endl<<endl;
  72.     attendi();
  73. }
  74.  
  75. int scelta_difficolta( int punteggio ) {
  76.     int poss, diff;
  77.  
  78.     do {
  79.         vuota_console();
  80.         cout<<" Scegli la difficoltà";
  81.         stampa_riga( ' ', 44 );
  82.         cout<<"Punteggio: "<<punteggio<<endl;
  83.         cout<<" 1-Facile (4 possibilità)"<<endl;
  84.         cout<<" 2-Media (3 possibilità)"<<endl;
  85.         cout<<" 3-Difficile (2 possibilità)"<<endl;
  86.         cout<<" 4-Impossibile (1 possibilità)"<<endl;
  87.         cout<<" ";
  88.  
  89.         cin>>diff;
  90.         poss = diff>0 && diff<5 ? 5-diff : 0;
  91.     } while( poss == 0 );
  92.  
  93.     vuota_console();
  94.  
  95.     cout<<" Difficoltà impostata ("<<poss<<" possibilità)";
  96.  
  97.     attendi( 2000 );
  98.     vuota_console();
  99.     return poss;
  100. }
  101.  
  102. int gioca( int num, int poss, int punteggio ) {
  103.     int numins;
  104.     int giusto;
  105.  
  106.     while( poss > 0 ) {
  107.         stampa_riga( ' ', 66 );
  108.         cout<<"Punteggio: "<<punteggio<<endl;
  109.         cout<<" Ora prova ad indovinare il numero >> ";
  110.         cin>>numins;
  111.  
  112.         if( numins == num ) {
  113.             giusto = 1;
  114.         }
  115.         else {
  116.             if( numins < num )
  117.                 cout<<" Ci sei vicino, è più grande ";
  118.             else cout<<" Ci sei vicino, è più piccolo ";
  119.  
  120.             attendi( 1500 );
  121.             vuota_console();
  122.         }
  123.  
  124.         --poss;
  125.     }
  126.  
  127.     return giusto;
  128. }
  129.  
  130. void sbagliato( int num, int punteggio, int record ) {
  131.     cout<<" Hai terminato le possibilità a disposizione";
  132.     stampa_riga( ' ', 22 );
  133.     cout<<"Punteggio: "<<punteggio<<endl<<endl;
  134.     cout<<" Il numero era >> "<<num<<endl;
  135.     cout<<" Il record attuale è >> "<<record;
  136.  
  137.     cout<<endl<<endl;
  138.     attendi();
  139. }
  140.  
  141. void corretto( int num, int *punteggio, int *record ) {
  142.     vuota_console();
  143.     cout<<" Hai indovinato!";
  144.     stampa_riga( ' ', 50 );
  145.     cout<<"Punteggio: "<<*punteggio<<endl<<endl;
  146.     ++(*punteggio);
  147.  
  148.     if( *record < *punteggio ) {
  149.         cout<<" Nuovo record!";
  150.         *record = *punteggio;
  151.     }
  152.     else {
  153.         cout<<" Il record attuale e' >> "<<*record;
  154.     }
  155.  
  156.     cout<<endl<<endl;
  157.     attendi();
  158. }
  159.  
  160. void saluti_e_baci() {
  161.     vuota_console();
  162.     cout<<" Arrivedolci";
  163.     attendi( 1000 );
  164.     vuota_console();
  165.     cout<<" Esposito say: "<<"I TIGLI"<<endl<<endl;
  166.     attendi( 1000 );
  167. }
  168.  
  169. bool gioca_ancora( int punteggio ) {
  170.     string ancora;
  171.     char input;
  172.  
  173.     do {
  174.         vuota_console();
  175.         stampa_riga( ' ', 66 );
  176.         cout<<"Punteggio: "<<punteggio<<endl;
  177.         cout<<" Vuoi rigiocare ? si/no >> ";
  178.         cin>>ancora;
  179.         input = tolower( *(ancora.c_str()) );
  180.     } while( input!='s' && input!='n' );
  181.  
  182.     return input == 's';
  183. }



ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote