Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
João Augusto Gomes Ribeiro

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

Recommended Posts

Eu estou fazendo um programa sobre o jogo da velha,porém o único problema é que eu tenho que fazer uma variável inteira receber um caractere (que no caso é o "X" ou "O") Mas não dá certo tem como me ajudar

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@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,

Editado por devair1010
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@João Augusto Gomes Ribeiro      você   colocou essa variável como string ou char ?   por que aqui coloquei ela como char .    se você puder poste  o seu código , para vermos como está e em que podemos ajudar .

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)
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

 

 

Editado por João Augusto Gomes Ribeiro
  • Curtir 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010Olha cara eu não consigo declarar uma variável como "char" não sei se é o compilador ou outra coisa,tive que mudar para "string"

e agora deu esse erro: [Error] invalid conversion from 'const char*' to 'int' [-fpermissive]

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@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;
}

 

Editado por devair1010
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@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;
    }
}

 

Editado por devair1010
  • Curtir 2

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@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;
}

 

Editado por devair1010
  • Curtir 2

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

@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

Editado por João Augusto Gomes Ribeiro
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

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

Editado por devair1010
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×