Oppure

Loading
23/11/16 18:11
Ironman2213
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

#include <iostream>
#include <string>
#include <windows.h>
#include <ctime>

using namespace std;
int main()
{
	int punteggio;
	int record;
	string scelta;
	scelta = "si";
	punteggio=0;
	record=0;
	while(scelta=="si" )
	{
		int conta;
	    string magg;
	    string min;
	    int diff;
	    int num;
	    int numins;
	    int poss;
	    int giusto;
	    diff=0;
	    poss=0;
	    conta=0;
	    giusto=0;
        system("CLS");
	    system("color 0a");
	    cout<<"Benvenuto nel gioco 'Indovina il numero'                           Punteggio: "<<punteggio<<endl;
	    cout<<"Devi indovinare il numero generato tra 0 e 100"<<endl;
	    srand((unsigned)time(NULL));
        num=rand() % 100+1;
        cout<<" "<<endl;
        system("PAUSE");
	    system("CLS");
	    cout<<"";
	    cout<<"Scegli la difficolta                                               Punteggio: "<<punteggio<<endl;
	    cout<<" 1-Facile (4 possibilita)"<<endl<<" 2-Media (3 possibilita)"<<endl<<" 3-Difficile (2 possibilita)"<<endl<<" 4-Impossibile (1 possibilita)"<<endl;
	    cin>>diff;
	    system("CLS");
	    switch(diff)
	    {
	    	case (1):
	    		poss=4;
	    		break;
	    	case (2):
	    		poss=3;
	    		break;
	    	case (3):
	    		poss=2;
	    		break;
	    	case (4):
	    		poss=1;
	    		break;
	    	default:
	    	{
	    		cout<<"Difficolta non valida";
			    Sleep(1000);
	        	exit(0);
	        	break;
			}
	    }
	    cout<<"Difficolta impostata";
	    Sleep(1000);
	    system("CLS");
	    
	    while(conta<poss)
	    {
	    	cout<<"                                                                    Punteggio: "<<punteggio<<endl;
		    cout<<"Ora prova ad indovinare il numero >> ";
		    cin>>numins;
		    if(numins==num)
		    {
			    conta=poss;
			    giusto=1;
		    }
		    else
		    {
			    if(numins<num)
			    {
				    if(poss==1)
					    system("CLS");
				    else
				    {
					    cout<<"Ci sei vicino, e' più grande ";
				        Sleep(1500);
				        system("CLS");
				    }
			    }
			    else
			    {
				    if(poss==1)
					    system("CLS");
				    else
				    {
					    cout<<"Ci sei vicino, e' più piccolo";
			    	    Sleep(1500);
				        system("CLS");
				    }
			    }
		    }
		    conta=conta+1;
	    }
	
	    if(giusto==0)
	    {
		    cout<<"Hai terminato le possibilita a disposizione                        Punteggio: "<<punteggio<<endl;
		    cout<<"";
		    cout<<"Il numero era >> "<<num<<endl;
		    cout<<"";
		    cout<<"Il record attuale e' >> "<<record;
		    Sleep(3000);
	    }	
	    else
	    {
	    	system("CLS");
	        cout<<"Hai indovinato !                                                    Punteggio: "<<punteggio<<endl;
	        punteggio=punteggio+1;
	        if(record<punteggio)
	        {
	        	cout<<"Nuovo record !";
	        	record=punteggio;
			}
			else
			    cout<<"Il record attuale e' >> "<<record;
			Sleep(2000);
	    }
	    system("CLS");
	    cout<<"                                                                    Punteggio: "<<punteggio<<endl;
	    cout<<"Vuoi rigiocare ? si/no >> ";
	    cin>>scelta;
    }
    
    system("CLS");
    cout<<" ";
    cout<<"Arrivedolci";
    Sleep(1000);
    system("CLS");
    cout<<"";
    cout<<"Esposito say :"<<"I TIGLI";
    Sleep(1000);
}
Ultima modifica effettuata da Ironman2213 23/11/16 18:15
aaa
23/11/16 23:58
AldoBaldo
Magari se spezzassi il programma dividendolo in funzioni/routine più maneggevoli sarebbe più semplice orientarsi, no?

#include <iostream>
#include <string>
#include <windows.h>
#include <ctime>
#include <clocale>

using namespace std;

void vuota_console();
void attendi();
void attendi( time_t ms );
void stampa_riga( char c, size_t n );
void presenta_programma( int punteggio );
int scelta_difficolta( int punteggio );
int gioca( int num, int poss, int punteggio );
void sbagliato( int num, int punteggio, int record );
void corretto( int num, int *punteggio, int *record );
void saluti_e_baci();
bool gioca_ancora( int punteggio );

int main() {
    int punteggio = 0;
    int record = 0;

    setlocale( LC_ALL, "Italian_italy.1252" );
    srand( (unsigned)time(NULL) );

    do {
        int num, poss, giusto;
        string magg, min;

        presenta_programma( punteggio );

        poss = scelta_difficolta( punteggio );

        num = rand()%100 + 1;
        giusto = gioca( num, poss, punteggio );

        if( giusto == 0 )
            sbagliato( num, punteggio, record );
        else corretto( num, &punteggio, &record );
    } while( gioca_ancora(punteggio) );

    saluti_e_baci();
    return 0;
}

void vuota_console() {
    system( "cls" );
}

void attendi() {
    cout<<" ";
    system( "PAUSE" );
}

void attendi( time_t ms ) {
    Sleep( ms );
}

void stampa_riga( char c, size_t n ) {
    while( n-- > 0 ) cout<<c;
}

void presenta_programma( int punteggio ) {
    vuota_console();
    system( "color 0a" );
    cout<<" Benvenuto nel gioco 'Indovina il numero'";
    stampa_riga( ' ', 24 );
    cout<<"Punteggio: "<<punteggio<<endl;
    cout<<" Devi indovinare il numero generato tra 0 e 100"<<endl<<endl;
    attendi();
}

int scelta_difficolta( int punteggio ) {
    int poss, diff;

    do {
        vuota_console();
        cout<<" Scegli la difficoltà";
        stampa_riga( ' ', 44 );
        cout<<"Punteggio: "<<punteggio<<endl;
        cout<<" 1-Facile (4 possibilità)"<<endl;
        cout<<" 2-Media (3 possibilità)"<<endl;
        cout<<" 3-Difficile (2 possibilità)"<<endl;
        cout<<" 4-Impossibile (1 possibilità)"<<endl;
        cout<<" ";

        cin>>diff;
        poss = diff>0 && diff<5 ? 5-diff : 0;
    } while( poss == 0 );

    vuota_console();

    cout<<" Difficoltà impostata ("<<poss<<" possibilità)";

    attendi( 2000 );
    vuota_console();
    return poss;
}

int gioca( int num, int poss, int punteggio ) {
    int numins;
    int giusto;

    while( poss > 0 ) {
        stampa_riga( ' ', 66 );
        cout<<"Punteggio: "<<punteggio<<endl;
        cout<<" Ora prova ad indovinare il numero >> ";
        cin>>numins;

        if( numins == num ) {
            giusto = 1;
        }
        else {
            if( numins < num )
                cout<<" Ci sei vicino, è più grande ";
            else cout<<" Ci sei vicino, è più piccolo ";

            attendi( 1500 );
            vuota_console();
        }

        --poss;
    }

    return giusto;
}

void sbagliato( int num, int punteggio, int record ) {
    cout<<" Hai terminato le possibilità a disposizione";
    stampa_riga( ' ', 22 );
    cout<<"Punteggio: "<<punteggio<<endl<<endl;
    cout<<" Il numero era >> "<<num<<endl;
    cout<<" Il record attuale è >> "<<record;

    cout<<endl<<endl;
    attendi();
}

void corretto( int num, int *punteggio, int *record ) {
    vuota_console();
    cout<<" Hai indovinato!";
    stampa_riga( ' ', 50 );
    cout<<"Punteggio: "<<*punteggio<<endl<<endl;
    ++(*punteggio);

    if( *record < *punteggio ) {
        cout<<" Nuovo record!";
        *record = *punteggio;
    }
    else {
        cout<<" Il record attuale e' >> "<<*record;
    }

    cout<<endl<<endl;
    attendi();
}

void saluti_e_baci() {
    vuota_console();
    cout<<" Arrivedolci";
    attendi( 1000 );
    vuota_console();
    cout<<" Esposito say: "<<"I TIGLI"<<endl<<endl;
    attendi( 1000 );
}

bool gioca_ancora( int punteggio ) {
    string ancora;
    char input;

    do {
        vuota_console();
        stampa_riga( ' ', 66 );
        cout<<"Punteggio: "<<punteggio<<endl;
        cout<<" Vuoi rigiocare ? si/no >> ";
        cin>>ancora;
        input = tolower( *(ancora.c_str()) );
    } while( input!='s' && input!='n' );

    return input == 's';
}
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.