Ir ao conteúdo
  • Cadastre-se

C++ problema para uma variável inteira receber um caractere


Posts recomendados

@devair1010

O único problema do código é que não vai converter as casas onde foi escolhido anteriormente

#include <iostream>
using namespace std;
void mostrar();
int pos[9],velha[3][3],o,p,r,c;
string aux="O";
void X_ou_O(){
	if(aux=="O"){
	aux = "X";
	}else{
	if(aux=="X"){
	aux = "O";
	}
	}
}
int main(){
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
		c = c + 1;
		velha[o][p] = c;
		}
		}
	mostrar();
	for(r=0;r<9;r++){
	cout << "Digite uma posicao: " << endl;
	cin >> pos[r];
	system("cls");
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
			if(pos[r] != velha[o][p]){
			cout << " [ " << velha[o][p] << "] ";
			}else{
			if(pos[r] == velha[o][p]){
			X_ou_O();
			velha[o][p] = (int)aux[0]; 
			cout << " [ " << (char)velha[o][p] << "] ";
			}
			}
	}
	cout << endl;
		cout << " +----+-----+----+" << endl;

	}
	}
		system ("pause");
	return 0;
}

void mostrar(){
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
			cout << " [ " << velha[o][p] << "] " ;
		}
	cout << endl;
	cout << " +----+-----+----+" << endl;
	}
	}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@João Augusto Gomes Ribeiro    isso por que ficou faltando um comando para isso,  o código está certo , apenas coloque essas linhas dentro do laço :

mostrar();
for(r=0;r<9;r++){
    cout << "Digite uma posicao: " << endl;
    cin >> pos[r];
    system("cls");
    cout << " +----+-----+----+" << endl;
    for(o=0;o<3;o++){
        for(p=0;p<3;p++){
            if(pos[r] != velha[o][p]){
                if(velha[o][p] > 9)cout << " [ " << char (velha[o][p]) << "] ";//essa linhas aqui 
                else cout << " [ " <<(velha[o][p]) << "] ";//e essa também
            }else{
                if(pos[r] == velha[o][p]){
                    X_ou_O();
                    velha[o][p] = (int)aux[0];
                    cout << " [ " << char ( velha[o][p] ) << "] ";//esse comando char aqui é fora do parenteses
                                                                  //e não dentro

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olá @devair1010 Eu agora estou com um problema na hora de exibir quando um jogador ganha,

recentemente o código está assim.

#include <iostream>
using namespace std;
void mostrar();
int pos[9],velha[3][3],o,p,r,c;
string aux="O";
bool g;
void X_ou_O(){
	if(aux=="O"){
	aux = "X";
	}else{
	if(aux=="X"){
	aux = "O";
	}
	}
}
int main(){
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
		c = c + 1;
		velha[o][p] = c;
		}
		}
	mostrar();
	for(r=0;r<9;r++){
	cout << "Digite uma posicao: " << endl;
	cin >> pos[r];
	system("cls");
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
        for(p=0;p<3;p++){
            if(pos[r] != velha[o][p]){
                if(velha[o][p] > 9)cout << " [ " << char (velha[o][p]) << "] ";//essa linhas aqui 
                else cout << " [ " <<(velha[o][p]) << "] ";//e essa também
            }else{
                if(pos[r] == velha[o][p]){
                    X_ou_O();
                    velha[o][p] = (int)aux[0];
                    cout << " [ " << char ( velha[o][p] ) << "] ";
				}
	}
	}
	cout << endl;
		cout << " +----+-----+----+" << endl;

	}
      for(o=0;o<3;o++){
	if(velha[o][1]==velha[o][2]&&velha[o][2]==velha[o][3]){
	g = true;
	}
	}
	for(p=0;p<3;p++){
	if(velha[1][p]==velha[2][p]&&velha[2][p]==velha[3][p]){
	g = true;
	}
	}
	if(velha[1][1]==velha[2][2]&&velha[2][2]==velha[3][3]){
	g = true;
	}
	if(velha[1][3]==velha[2][2]&&velha[2][2]==velha[3][1]){
	g = true;
	}
	if(g==true){
	cout << " JOGO FINALIZADO!!!" << endl;
	system("cls");
	}
	}
		system ("pause");
	return 0;
}

void mostrar(){
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
			cout << " [ " << velha[o][p] << "] " ;
		}
	cout << endl;
	cout << " +----+-----+----+" << endl;
	}
	}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@João Augusto Gomes Ribeiro    na hora de comparar para ver se ganhou, você colocou 

velha[o][1]  velha[o][2]   velha[o][3]

mas na matriz, velha, não  tem a posição 3 , mas apenas de zero até 2 , então precisa ser assim :

velha[o][0]   velha[o][1]   velha[o][2]

e depois de cada loop que compara , coloque um if para fazer outras comparações apenas se g for diferente de true . e  seria bom colocar um loop do / while  para poder jogar outras vezes .  assim  a cada vez que for jogar novamente precisa zerar as variáveis  c=0  g=true  .

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010Bom eu descobri isso em outra postagem sua sobre o jogo da velha,mesmo assim obrigado. Bom eu não tenho mais esse problema ,mas eu tenho outros problemas que são:

quando um jogador faz uma jogada igual a uma jogada anterior:

for(r=0;r<9;r++){
cout << "voce vai colocar {" << aux << "} " << "em que posicao" << endl;
	cin >> pos[r];
	system("cls");
for(s=0;s<9;s++){
  if(pos[s]==pos[r]){
    preencher = true;
  }
}
if(preencher==true){
 cout << " JOGADA INVALIDA " << endl;
cout << " +----+-----+----+" << endl;
cout << " Digite uma posicao para colocar {" << aux << "} de novo" << endl;
cin >> pos[r];
system("cls");
}

ou quando faz uma jogada maior que o numero de casas:

for(r=0;r<9;r++){
cout << "voce vai colocar {" << aux << "} " << "em que posicao" << endl;
	cin >> pos[r];
	system("cls");
  if(pos[r]>9){
    cout << " JOGADA INVALIDA " << endl;
	cout << " +----+-----+----+" << endl;
	cout << " Digite uma posicao para colocar {" << aux << "} de novo" << endl;
	cin >> pos[r];
	system("cls");
  }
}

ou quando o jogo empatou(quando nenhum jogador conseguiu ganhar):

for(r=0;r<9;r++){
if(empatou==true){
cout <<  "JOGO EMPATADO" << endl;
 system("pause");
  return 0;
}
if(r==9){
if(ganhou!=true){
empatou = true;
}
}
}

Nenhumas dessas funcionou pode me ajudar,obrigado.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@João Augusto Gomes Ribeiro      nesse código acima,  que você postou quarta-feira ,  para saber se empatou coloque um if  para saber se a variável g é false e se for então empatou.  e para as jogadas invalidas coloque um loop e dentro dele pega qual jogada e verifique se é menor que 1 ou maior que nove se for então repete . e se for uma letra então precisa usar uma variável char para pegar a jogada e verificar com strlen()

char h[10];
   .
   .
c=strlen(h);
if(c>1)cout<<"jogada invalida\n";
   .
   .
c=int(h[0]);
pos[r]=c;

se o tamanho for maior que 1 então é jogada inválida e em seguida transforme para inteiro e verifique se é menor que 1 ou maior que 9 .

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010Eu estou com uma duvida onde eu irei usar esses codigos pois eu fiz uma gambiarra

#include <iostream>
using namespace std;
void mostrar();
int pos[9],velha[3][3],o,p,r,c,g,s;
string aux="O";
bool ganhador,jog_inv=false,empatou;
void X_ou_O(){
	if(aux=="O"){
	aux = "X";
	}else{
	if(aux=="X"){
	aux = "O";
	}
	}
}
void terminou_velha(){
	g = false;
	//horizontal
	if(velha[0][0]==velha[0][1]&&velha[0][1]==velha[0][2]){
	g = true;
	}else{
	if(velha[1][0]==velha[1][1]&&velha[1][1]==velha[1][2]){
	g = true;
	}else{
	if(velha[2][0]==velha[2][1]&&velha[2][1]==velha[2][2]){
	g = true;
	}else{
	//vertical
	if(velha[0][0]==velha[1][0]&&velha[1][0]==velha[2][0]){
	g = true;
	}else{
	if(velha[0][1]==velha[1][1]&&velha[1][1]==velha[2][1]){
	g = true;
	}else{
	if(velha[0][2]==velha[1][2]&&velha[1][2]==velha[2][2]){
	g = true;
	}else{
	//diagonal
	if(velha[0][0]==velha[1][1]&&velha[1][1]==velha[2][2]){
    g = true;
    }else{
    if(velha[0][2]==velha[1][1]&&velha[1][1]==velha[2][0]){
	g = true;
    }
	}
	}
	}
	}
	}
	}
	}
}
int main(){
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
		c = c + 1;
		velha[o][p] = c;
		}
		}
	mostrar();
	for(r=0;r<9;r++){
	if(r==9){
	if(g==false){
	empatou = true;
	}
	}
	X_ou_O();
	if(g==false){
	cout << "voce vai colocar {" << aux << "} " << "em que posicao" << endl;
	cin >> pos[r];
	system("cls");
	}else{
	if(g==true){
	cout << " JOGO ENCERRADO!!!!!!	" << endl;
	system("pause");
	return 0;
	}else{
	if(jog_inv==true){ 
	cout << " JOGADA INVALIDA " << endl;
	cout << " +----+-----+----+" << endl;
	cout << " Digite uma posicao para colocar {" << aux << "} de novo" << endl;
	cin >> pos[r];
	system("cls");
	}else{
	if(empatou==true){
	cout << " JOGO EMPATOU " << endl;
	system("pause");
	return 0;
	}
	}
	}
	}
	if(pos[r]<1 || pos[r]>9){
	jog_inv = true;
	}else{
	for(s=0;s<9;s++){
	if(pos[s]==pos[r]){
	jog_inv = true;
	}
	}
	}
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
        for(p=0;p<3;p++){
            if(pos[r] != velha[o][p]){
                if(velha[o][p] > 9)cout << " [ " << char (velha[o][p]) << "] ";
                else cout << " [ " <<(velha[o][p]) << "] ";
            }else{
            velha[o][p] = (int)aux[0];
            cout << " [ " << char ( velha[o][p] ) << "] ";
			}
	}
	cout << endl;
		cout << " +----+-----+----+" << endl;
	}// ver se o jogo empatou
	terminou_velha();
	}
		system ("pause");
	return 0;
}

void mostrar(){
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
			cout << " [ " << velha[o][p] << "] " ;
		}
	cout << endl;
	cout << " +----+-----+----+" << endl;
	}
	}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...