Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

@João Augusto Gomes Ribeiro    as variáveis int não podem receber caracteres,  mas você pode pegar o código ascii do caractere, que é um inteiro,  e então a variável poderá receber o código desse caractere, e para pegar esse código ascii seria assim :

variavel_char = caractere;
variavel_int  = (int)variavel_char;
printf("O Valor Ascii de %c e = %d\n\n",variavel_char,variavel_int);

e no caso o código ascii do caractere é 88 e do O é 79,

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

int velha[3][3],o,p,c;
string aux;
aux = "O";
void X_ou_O(){ // lopping para ficar mudando entre X e O
	if(aux=="O"){
	aux = "X";
	}else{
	if(aux=="X"){
	aux = "O";
	}
	}
}
for(o=0;o<3;o++){
		for(p=0;p<3;p++){
          c = c + 1;
          velha[o][p] = c;
        }
}
for(o=0;o<3;o++){
		for(p=0;p<3;p++){
      if(posicao[r] == c){
	velha[o][p] = (int)aux; // faz com que a casa que eu escolhi receba X ou O
	}
     }
	}

@devair1010

 

 

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

@João Augusto Gomes Ribeiro    coloque a variável aux como char.  e  esse é todo o código ?   está faltando a função main() e como você sabe o programa não funciona sem essa função main .  então essa função seria colocada assim :

include <iostream>
char aux='O';
       .
       .
aqui suas funções, elas precisam
  ficar antes a main
       .
       .
int main(){
       .
 aqui começa o código
       .
    return 0;
}

 

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

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

@devair1010 tá aqui.

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

@João Augusto Gomes Ribeiro      modifique esse inicio do código  e coloque assim :

#include <iostream>
#include <conio.h>
using namespace std;
void mostrar();
int pos[9],velha[3][3],o,p,r,c,Iaux;
char aux='O';
int X_ou_O(){
	if(aux=='O'){
	    Iaux = 'X';
	}else{
	    if(aux=='X'){
	        Iaux = 'O';
	    }
	}
}
int main(){
	X_ou_O();
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
	        velha[o][p] = Iaux;
	    }
	}
	mostrar();

 

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

@João Augusto Gomes Ribeiro    testei no dev c++ da versão   4.9.9.2   e  funcionou  ,  mas qual a ideia em colocar X  ou O  no tabuleiro , na verdade você poderia apenas desenhar  o tabuleiro  e quando o jogador jogar , ai  você coloca o X  ou o O , então não precisaria converter essa string em inteiro .    para desenhar o tabuleiro seria assim :

#include <stdio.h>
int vet[4][4],vet2[4][4],vjc=1,cg=0,vg=0;
void desenha(int vt){
    int i,j;
    printf("        1   2   3\n" );
    printf("        %c   %c   %c\n\n",31,31,31);
    for(i=1;i<4;i++){
        if(i==1){printf(" A -%c  ",16);}
        else{
            if(i==2){printf(" B -%c  ",16);}
            else{
                printf(" C -%c  ",16);
            }
        }
        for(j=1;j<4;j++){
            if(vt==1){
                if(vet[i][j]==1){
                    if(vjc==1){
                        printf(" O ");
                    }
                    else{printf(" X ");}
                }
                else{
                    if(vet[i][j]==2){
                        if(vjc==2){
                            printf(" O ");
                        }
                        else{printf(" X ");}
                    }
                    else{printf("   ");}
                }
            }
            else{
                if(vet2[i][j]==1){
                    if(vjc==1){
                        printf(" O ");
                    }
                    else{printf(" X ");}
                }
                else{
                    if(vet2[i][j]==2){
                        if(vjc==2){
                            printf(" O ");
                        }
                        else{printf(" X ");}
                    }
                    else{printf("   ");}
                }
            }
            if(j==3){printf("\n");}
            if(j<3){printf("|");}
        }
        if(i<3){printf("       -----------\n");}
    }
    printf("                                          Vit%crias Do Computador ------> %d\n",224,cg);
    printf("                                          Vit%crias Do Jogador Humano --> %d\n",224,vg);
}
int main(){
    desenha(1);
/*     .
       .
 colocar a função para pegar a jogada
       .
       .        */
    return 0;
}

 

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

@João Augusto Gomes Ribeiro    o único jeito dessa variável velha, que é uma matriz,  receber um X ou O  é passando essa variável do tipo int para o tipo char ou string ,  aqui como ficaria essa variável como string :

#include <iostream>
#include <conio.h>
using namespace std;
char aux='X';
int i,j;
string velha[4][4];
int main(){
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            velha[i][j]=aux;
            cout<<velha[i][j]<<"  ";
        }
        cout<<endl;
    }
    getch();
    return 0;    
}

ou o seu código imprimindo os caracteres de acordo com os números colocados na matriz :

#include <iostream>
#include <conio.h>
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(){
	X_ou_O();
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
            c = c + 1;
            velha[o][p] = c;
        }
	}
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
            velha[o][p] = (int)aux[0];
        }
	}
	mostrar();
	for(r=0;r<9;r++){
	    cout << "Digite um valor: " << endl;
	    cin >> pos[r];
	    system("cls");
	    cout << " +----+-----+----+" << endl;
	    for(o=0;o<3;o++){
		    for(p=0;p<3;p++){	
			    cout << " [ " << 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<<" [ "<<char(velha[o][p])<<"] ";
		}
        cout << endl;
	    cout << " +----+-----+----+" << endl;
    }
}

 

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

Todos, Oi!

Que interessante essa questão porque envolve um confronto entre tipos e tipos literais: No caso strings.

Apesar do programa ser escrito na sintaxe C++, consigo ver muitos elementos de C aqui também. Esse Mix C\C++ é mais comum que imaginará, em todos os código que vi de C++ até o momento nenhum deles tem sua sintaxe de Puro C++. Esse é o caso, então tomei a liberdade de corrigir a Sintaxe C, somente isso.

 

Se é importante que velha seja tipo int(*)[] - Array of int então não podemos imprimir int sem converter para char.

Não se pode comparar  tipo char * com tipos const char[2] o primeiro é ponteiro o segundo é objeto.

Não se pode imprimir tipos int que tem 4 bytes, dentro da tabela ASCII, vai ter que optar ou converte para tipos char, ou converte para tipos wchar_t a mensagem toda. Optei pela tradução ASCII e converti os tipos int to char um a um no loop.

 

Corrigido esses aspectos sintáticos, o programa rodou, achei importante mencionar os aspecto acima para que não passem batidos.

Spoiler

#include<iostream>
#include<stdlib.h>
using namespace std;


void mostrar();

/* #VARIÁVEIS GLOBAIS */
int pos[9],velha[3][3],o,p,r,c;
char * aux = (char *)"O";

void X_ou_O(){
	if(*aux == *"O"){
	aux = (char *)"X";
	}else{
	if(*aux == *"X"){
	aux = (char *)"O";
	}
	}
}
int main(){

	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
	c = c + 1;
	velha[o][p] = c;
	}
	}
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
  X_ou_O();
	velha[o][p] = (int)*aux;
	}
	}
	mostrar();
	for(r=0;r<9;r++){
	cout << "Digite um valor: " << endl;
	cin >> pos[r];
	system("cls");
	cout << " +----+-----+----+" << endl;
	for(o=0;o<3;o++){
		for(p=0;p<3;p++){
			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 << " [ " << (char)velha[o][p] << "] " ;
		}
	cout << endl;
	cout << " +----+-----+----+" << endl;
	}
	}

 

 

Desculpa por não poder ajudar.

Minha intenção é fornecer correção apenas para sintaxe.

 

valeu!

~~ / ~~

 

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

@João Augusto Gomes Ribeiro   atoi (  array to int )  é uma função da linguagem c para converter string do       tipo char[ ] em inteiro , então se você tiver uma string com  dígitos de 0 até 9 ela transforma essa string em um inteiro assim :

char variavel[256] = "115";
int num = atoi(variavel);
printf(" %d \n",num);

se no inicio da string for letra ela retorna zero,  e no c++ o código seria assim :

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
string var;
int main(){
    var="115";
    cout<<"A String Convertida Para Inteiro : "<<atoi(var.c_str())<<endl;
    return 0;
}

 

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

@devair1010 ia responder, mas você foi mais rápido, só uma pequena correção: funciona também no C++ com a string:


 

std::string Numero10ComoString = "10";
std::cout << "Numero 10 como inteiro[C++]: " << atoi(Numero10ComoString.c_str()) << std::endl;

 

Mas não é o ideal para usar na linguagem C++ visto que já existe uma classe no C++ apenas para conversões de tipos.

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

@devair1010Eu irei esclarecer o que eu quero fazer, vi esse exercício no canal do Gustavo Guanabara no curso de logica de programação(algoritmo/portugol) da aula 15. Eu até baixei o pacote da aula para entender ,vi que ele usou uma função que fazia uma variável inteira receber um caractere que era "numpcarac" ,tentei de todas formas achar uma função ou outra maneira ,que fazia a mesma coisa que essa função pois era só isso que faltava pro meu programa dar certo.Aula dele aqui em baixo ↓ ↓ ↓ ↓  

https://www.youtube.com/watch?v=hkE9WrjpAAk

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

@João Augusto Gomes Ribeiro    a função numpcarac é do compilador visualg , e esse comando converte um número para caractere e caso queira converter um caractere para inteiro você usa o comando caracpnum  ,  mas isso é a mesma coisa que o comando int faz na linguagem c :

num = (int)caractere[x];

converte apenas um caractere,  ou a função atoi que converte todos os caracteres da string desde que esses caracteres sejam dígitos de 0 até 9 :

em c++ dentro da main 

string var="115";
cout<<"Numero : "<<atoi(var.c_str())<<endl;

ou em c 
  
int num;
char var[20]="115";
num=atoi(var);
printf("%d\n",num);

nesse código do seu jogo da velha que postei acima a variável inteira  (  velha  ) está  recebendo um caractere, só que  convertido para inteiro, e na hora de imprimir ele converte novamente , mas de inteiro para caractere usando o comando char.

  • 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...