Valutare un singolo carattere del CHAR

di il
5 risposte

Valutare un singolo carattere del CHAR

Salve!
Mi sto cimentando nella creazione di un TRIS in C++ che avevo lasciato in sospeso per un po' causa influenza.

Il codice sorgente è questo:
#include <iostream>
#include <string>
using namespace std;

char t[9]={'0','1','2','3','4','5','6','7','8'};//tabella del tris
string g1, g2;
char sceltag1,sceltag2;
int c=0;
int null=0;

void mostra_tabella(){
		
	cout<<"\t|"<<t[0]<<"|"<<t[1]<<"|"<<t[2]<<"|"<<endl;
	cout<<"\t|"<<t[3]<<"|"<<t[4]<<"|"<<t[5]<<"|"<<endl;
	cout<<"\t|"<<t[6]<<"|"<<t[7]<<"|"<<t[8]<<"|"<<endl;
}

int scelta(int s, int s1, int s2){

	if(s<0 && s>8){
		cout<<"Inserisci un numero compreso da 0 a 8!\n";

	}
	else{
	
	for(int i=0; i<=8; i++)	{
	
	if(s1==t[i]){
		t[i]='X';}
	}//for per il primo giocatore
	
	for(int i=0; i<=9; i++)	{
	
	if(s2==t[i]){
		t[i]='O';}
    }//for per il secondo giocatore
  }//chiudo else
}
int controllo_vittoria(string win){//tutti i casi di vittoria
	if(t[0]=='X' && t[1]=='X' && t[2]=='X'||t[0]=='O' && t[1]=='O' && t[2]=='O' ){
		cout<<win<<" ha vinto!";		
		c=1;}
	
	if(t[2]=='X' && t[5]=='X' && t[8]=='X'|| t[2]=='O' && t[5]=='O' && t[8]=='O'){
		cout<<win<<" ha vinto!";		
		c=1;}
	
	if(t[6]=='X' && t[7]=='X' && t[8]=='X'|| t[6]=='O' && t[7]=='O' && t[8]=='O'){
		cout<<win<<" ha vinto!";		
		c=1;}
	
	if(t[0]=='X' && t[3]=='X' && t[6]=='X'|| t[0]=='O' && t[3]=='O' && t[6]=='O'){
		cout<<win<<" ha vinto!";
		c=1;}
	
	if(t[0]=='X' && t[4]=='X' && t[8]=='X'|| t[0]=='O' && t[4]=='O' && t[8]=='O'){
		cout<<win<<" ha vinto!";
		c=1;}
	
	if(t[6]=='X' && t[4]=='X' && t[2]=='X'|| t[6]=='O' && t[4]=='O' && t[2]=='O'){
		cout<<win<<" ha vinto!";	
		c=1;}
}

int pareggio(){
	for(int i=0; i<9; i++){
	if(t[0]!='0'){
    if(t[1]!='1'){
    if(t[2]!='2'){
    if(t[3]!='3'){
    if(t[4]!='4'){
    if(t[5]!='5'){
    if(t[6]!='6'){
    if(t[7]!='7'){
    if(t[8]!='8'){
                  cout<<"Pareggio! Nessuno ha vinto!";
                  c=1;
		
	}}}}}}}}}//chiudo tutti gli IF incatenati
 }
}

int main(){
	cout<<"Ciao! Benvenuto al gioco TRIS"<<endl;
	cout<<"Inserisci il nome del primo giocatore: ";
	cin>>g1;
	cout<<"Iinserisci il nome del secondo giocatore: ";
	cin>>g2; cout<<endl;
	
	cout<<g1<<" sara' la X"<<endl;
	cout<<g2<<" sara' la O"<<endl;
	cout<<"_____________________"<<endl<<endl;
	
	mostra_tabella();
	
	do{
	cout<<"\nE' il turno di "<<g1<<": ";
	cin>>sceltag1;
	scelta(sceltag1, sceltag1, null);
	mostra_tabella();
	
	controllo_vittoria(g1);
	pareggio();
	if(c==1)
	{break;}
	//turno g1
	cout<<"\nE' il turno di "<<g2<<": ";
	cin>>sceltag2;
	scelta(sceltag2, null, sceltag2);
	mostra_tabella();
	
	controllo_vittoria(g2);
	pareggio();
	//turno g2
}
	while(c==0);
	
	system("PAUSE");
}
	
Ora, il problema sale a galla quando inserisco un numero maggiore 8 o minore di 0.
Il controllo avviene nella funziona scelta, e da come potrete notare se avviaste il programma,
nel caso in cui mettessimo un valore a più di una cifra (ES. 15), vengono calcolati i valori singoli come 1 e 5; saltando anche i turni.

Dove sbaglio? Ho bisogno di puntatori?
Grazie in anticipo ad eventuali risposte.

5 Risposte

  • Re: Valutare un singolo carattere del CHAR

    Tu passi dei char alla funzione (sceltag1 e sceltag2), perché usi dei parametri int? I tipi dei dati devono essere coerenti ...
  • Re: Valutare un singolo carattere del CHAR

    oregon ha scritto:


    Tu passi dei char alla funzione (sceltag1 e sceltag2), perché usi dei parametri int? I tipi dei dati devono essere coerenti ...
    Giustissima osservazione, corretto l'errore.
    Il problema però persiste..
  • Re: Valutare un singolo carattere del CHAR

    Dipende da come hai corretto.
  • Re: Valutare un singolo carattere del CHAR

    #include <iostream>
    #include <string>
    using namespace std;
    
    char t[9]={'0','1','2','3','4','5','6','7','8'};//tabella del tris
    string g1, g2;
    char sceltag1,sceltag2;
    int c=0;
    int null=0;
    
    void mostra_tabella(){
    		
    	cout<<"\t|"<<t[0]<<"|"<<t[1]<<"|"<<t[2]<<"|"<<endl;
    	cout<<"\t|"<<t[3]<<"|"<<t[4]<<"|"<<t[5]<<"|"<<endl;
    	cout<<"\t|"<<t[6]<<"|"<<t[7]<<"|"<<t[8]<<"|"<<endl;
    }
    
    int scelta(char s, char s1, char s2){
    
    	if(s<0 && s>8){
    		cout<<"Inserisci un numero compreso da 0 a 8!\n";
    
    	}
    	else{
    	
    	for(int i=0; i<=8; i++)	{
    	
    	if(s1==t[i]){
    		t[i]='X';}
    	}//for per il primo giocatore
    	
    	for(int i=0; i<=9; i++)	{
    	
    	if(s2==t[i]){
    		t[i]='O';}
        }//for per il secondo giocatore
      }//chiudo else
    }
    int controllo_vittoria(string win){//tutti i casi di vittoria
    	if(t[0]=='X' && t[1]=='X' && t[2]=='X'||t[0]=='O' && t[1]=='O' && t[2]=='O' ){
    		cout<<win<<" ha vinto!";		
    		c=1;}
    	
    	if(t[2]=='X' && t[5]=='X' && t[8]=='X'|| t[2]=='O' && t[5]=='O' && t[8]=='O'){
    		cout<<win<<" ha vinto!";		
    		c=1;}
    	
    	if(t[6]=='X' && t[7]=='X' && t[8]=='X'|| t[6]=='O' && t[7]=='O' && t[8]=='O'){
    		cout<<win<<" ha vinto!";		
    		c=1;}
    	
    	if(t[0]=='X' && t[3]=='X' && t[6]=='X'|| t[0]=='O' && t[3]=='O' && t[6]=='O'){
    		cout<<win<<" ha vinto!";
    		c=1;}
    	
    	if(t[0]=='X' && t[4]=='X' && t[8]=='X'|| t[0]=='O' && t[4]=='O' && t[8]=='O'){
    		cout<<win<<" ha vinto!";
    		c=1;}
    	
    	if(t[6]=='X' && t[4]=='X' && t[2]=='X'|| t[6]=='O' && t[4]=='O' && t[2]=='O'){
    		cout<<win<<" ha vinto!";	
    		c=1;}
    }
    
    int pareggio(){
    	for(int i=0; i<9; i++){
    	if(t[0]!='0'){
        if(t[1]!='1'){
        if(t[2]!='2'){
        if(t[3]!='3'){
        if(t[4]!='4'){
        if(t[5]!='5'){
        if(t[6]!='6'){
        if(t[7]!='7'){
        if(t[8]!='8'){
                      cout<<"Pareggio! Nessuno ha vinto!";
                      c=1;
    		
    	}}}}}}}}}//chiudo tutti gli IF incatenati
     }
    }
    
    int main(){
    	cout<<"Ciao! Benvenuto al gioco TRIS"<<endl;
    	cout<<"Inserisci il nome del primo giocatore: ";
    	cin>>g1;
    	cout<<"Iinserisci il nome del secondo giocatore: ";
    	cin>>g2; cout<<endl;
    	
    	cout<<g1<<" sara' la X"<<endl;
    	cout<<g2<<" sara' la O"<<endl;
    	cout<<"_____________________"<<endl<<endl;
    	
    	mostra_tabella();
    	
    	do{
    	cout<<"\nE' il turno di "<<g1<<": ";
    	cin>>sceltag1;
    	scelta(sceltag1, sceltag1, null);
    	mostra_tabella();
    	
    	controllo_vittoria(g1);
    	pareggio();
    	if(c==1)
    	{break;}
    	//turno g1
    	cout<<"\nE' il turno di "<<g2<<": ";
    	cin>>sceltag2;
    	scelta(sceltag2, null, sceltag2);
    	mostra_tabella();
    	
    	controllo_vittoria(g2);
    	pareggio();
    	//turno g2
    }
    	while(c==0);
    	
    	system("PAUSE");
    }
    	
    
  • Re: Valutare un singolo carattere del CHAR

    Se stai inserendo un numero, allora il tipo di dato più corretto da usare è un int, non un char.
Devi accedere o registrarti per scrivere nel forum
5 risposte