Ir ao conteúdo

Limpar variável de vetor


Zeox

Posts recomendados

Postado

Salve.

Estou fazendo um jogo da velha simples em C++ usando apenas vetore, variaveis: (char, int), for, cadeamento de if's e do while. o código já está funcionando mais preciso de limpar um vetor de char com 9 posições (0 a 8). Tentei usar o comando "free(vet[j]);" dentro de uma estrutura for mais acusou erro. Tentei tambem usar "return main() so que persiste o erro do vetor já estar cheio. Alguma dica? Segue o código abaixo:

#include "iostream"
using namespace std;
int main(){
int jogada,i,fim,v1,v2,d1,d2,e,j,k,jogadas[8];
char *vet[8],marca,sn;
for(i=0;i<9;i++);
*vet[i] = (char *)malloc(sizeof(char));
v1=0;
v2=0;
d1=0;
d2=0;
e=0;
do{
cout<<"\t\t\t\t#################\n\t\t\t\t--0--|--1--|--2--\n\t\t\t\t--3--|--4--|--5--\n\t\t\t\t--6--|--7--|--8--\n\n\t\t\t\t#################\n";
fim=0;
i=0;
do{//Inicio do laço FIM
do{
cout<<"Entre com a jogada ";
cin>>jogada;
jogadas[jogada]=jogada;
for(k=0;k<=9;k++){
if(jogadas[k]==jogadas[jogada])
j=0;
else
j=1;
}
}while(j==0);
if(i%2==0){ //If 1
marca='X';
} //Fim if 1
else{ //Else 1
marca='0';
}//Fim do Else 1
*vet[jogada]=marca;
system("cls");
cout<<"\t\t\t\t#################\n\t\t\t\t--0--|--1--|--2--\n\t\t\t\t--3--|--4--|--5--\n\t\t\t\t--6--|--7--|--8--\n\n\t\t\t\t#################\n";
for(j=0;j<9;j++){
if((*vet[j]=='X' || *vet[j] == '0') && (j==2 || j==5 || j==8 ))
cout<<"--"<<*vet[j]<<"--\n";
else
if((*vet[j]=='X' || *vet[j] == '0') && (j==0 || j==3 || j==6 ))
cout<<"\t\t\t\t--"<<*vet[j]<<"--|";
else
if((*vet[j]=='X' || *vet[j] == '0') && (j==1 || j==4 || j==7 ))
cout<<"--"<<*vet[j]<<"--|";
else
if(j==0 || j==3 || j==6)
cout<<"\t\t\t\t-----|";
else
if(j==1 || j==4 || j==7)
cout<<"-----|";
else
if(j==2 || j==5 || j==8)
cout<<"-----\n";
}

if((*vet[0] == *vet[1] && *vet[1] == *vet[2] || *vet[3]==*vet[4] && *vet[4]==*vet[5] || *vet[6]==*vet[7] && *vet[7]==*vet[8] || *vet[0]==*vet[4] && *vet[4]==*vet[8] || *vet[2]==*vet[4] && *vet[4]==*vet[6] || *vet[0]==*vet[3] && *vet[3]==*vet[6] || *vet[1]==*vet[4] && *vet[4]==*vet[7] || *vet[2]==*vet[5] && *vet[5]==*vet[8]) || i==8){
fim=1;
}
i++;
}while(fim == 0); // Fim do laço FIM
cout<<"\n";
if(i==9){ //Empate
e++;
cout<<"Jogador 1 - Vitorias: "<<v1<<" - Derrotas: "<<d1<<" - Empates: "<<e<<endl;
cout<<"Jogador 2 - Vitorias: "<<v2<<" - Derrotas: "<<d2<<" - Empates: "<<e<<endl;
}
else
if(i%2){ //Vitoria do Jogador 1
v1++;
d2++,
cout<<"Jogador 1 - Vitorias: "<<v1<<" - Derrotas: "<<d1<<" - Empates: "<<e<<endl;
cout<<"Jogador 2 - Vitorias: "<<v2<<" - Derrotas: "<<d2<<" - Empates: "<<e<<endl;
}
else{ // Vitoria do Jogador 2
v2++;
d1++;
cout<<"Jogador 1 - Vitorias: "<<v1<<" - Derrotas: "<<d1<<" - Empates: "<<e<<endl;
cout<<"Jogador 2 - Vitorias: "<<v2<<" - Derrotas: "<<d2<<" - Empates: "<<e<<endl;
}
cout<<"\n";
cout<<"Deseja jogar novamente? (s/n) ";
cin>>sn;
if(sn=='s'){
system("cls");
for(j=0;j<9;j++)
free(*vet[i]);
}
}while(sn=='s');
system("pause");
return 0;
} // Fim do Main

Postado

Oii..

Segue um exemplo de um jogo de velha em C++:

.

#include<stdio.h>

#include<stdlib.h>

main()

{

char matriz[3][3], valor, resp;

int linha=0, coluna=0, i=0, j=0, empate=0, venceu=0,cont=1, jogada=0, verifica[3][3];

do

{

jogada=1;empate=0;venceu=0;fflush(stdin);

for(i = 1; i < 4; i++){

for(j = 1; j < 4; j++){

matriz[j] =' '; //esvazia os vetores.

verifica[j]=' '; //esvazia os vetores.

}

}

do

{

if(jogada <= 10)

system("cls");//limpa a folha

printf("\n");

printf(" | | \n");

printf(" %c | %c | %c \n",matriz[1][1],matriz[1][2],matriz[1][3]);

printf("-----+-----+----- \n");

printf(" %c | %c | %c \n",matriz[2][1],matriz[2][2],matriz[2][3]);

printf(" | | \n");

printf("-----+-----+----- \n");

printf(" %c | %c | %c \n",matriz[3][1],matriz[3][2],matriz[3][3]);

printf(" | | \n");

printf("\n");

if(venceu==1)

{

if (jogada%2 == 0)

printf("RESULTADO: >>> \"X\" VENCEU <<<\n");

else

printf("RESULTADO: >>> \"O\" VENCEU <<<\n");

goto FIM; //termina o jogo

}

if(empate == 1)

{

printf("RESULTADO: >>> O JOGO EMPATOU <<<\n");

goto FIM; //termina o jogo

}

if(jogada % 2 != 0) //Impar = jogador 1, Par = jogador 2.

{

printf("VEZ DO JOGADOR 1= 'X'\n");

valor= 'X';

}

else

{

printf("VEZ DO JOGADOR 2= 'O'\n");

valor= 'O';

}

VOLTA:;

do

{

printf("INFORME O NUMERO DA LINHA.: ");

scanf("%d",&linha);

if(linha > 3) printf("O numero da linha nao pode ser maior que 3.\n");

if(linha < 1) printf("O numero da linha nao pode ser menor que 1.\n");

}while(linha > 3 || linha < 1);

do

{

printf("INFORME O NUMERO DA COLUNA: "); scanf("%d",&coluna);

if(coluna > 3) printf("O numero da coluna nao pode ser maior que 3.\n");

if(coluna < 1) printf("O numero da coluna nao pode ser menor que 1.\n");

}while(coluna > 3 || coluna < 1);

if(verifica[linha][coluna]==1) //verifica se a jogada já foi feita

{

printf(">>> Esta jogada ja foi feita!! <<<\n");

goto VOLTA;

}

else

{

matriz[linha][coluna]=valor; // coloca o valor no jogo "X" ou "O".

verifica[linha][coluna]=1; // coloca valor 1 em jogadas já feitas

}

//VERIFICA LINHAS.

if(matriz[1][1]=='X' && matriz[1][2]=='X' && matriz[1][3]=='X') venceu=1;

if(matriz[2][1]=='X' && matriz[2][2]=='X' && matriz[2][3]=='X') venceu=1;

if(matriz[3][1]=='X' && matriz[3][2]=='X' && matriz[3][3]=='X') venceu=1;

if(matriz[1][1]=='O' && matriz[1][2]=='O' && matriz[1][3]=='O') venceu=1;

if(matriz[2][1]=='O' && matriz[2][2]=='O' && matriz[2][3]=='O') venceu=1;

if(matriz[3][1]=='O' && matriz[3][2]=='O' && matriz[3][3]=='O') venceu=1;

//VERIFICA COLUNAS.

if(matriz[1][1]=='X' && matriz[2][1]=='X' && matriz[3][1]=='X') venceu=1;

if(matriz[1][2]=='X' && matriz[2][2]=='X' && matriz[3][2]=='X') venceu=1;

if(matriz[1][3]=='X' && matriz[2][3]=='X' && matriz[3][3]=='X') venceu=1;

if(matriz[1][1]=='O' && matriz[2][1]=='O' && matriz[3][1]=='O') venceu=1;

if(matriz[1][2]=='O' && matriz[2][2]=='O' && matriz[3][2]=='O') venceu=1;

if(matriz[1][3]=='O' && matriz[2][3]=='O' && matriz[3][3]=='O') venceu=1;

//VERIFICA DIAGONAIS.

if(matriz[1][1]=='X' && matriz[2][2]=='X' && matriz[3][3]=='X') venceu=1;

if(matriz[1][3]=='X' && matriz[2][2]=='X' && matriz[3][1]=='X') venceu=1;

if(matriz[1][1]=='O' && matriz[2][2]=='O' && matriz[3][3]=='O') venceu=1;

if(matriz[1][3]=='O' && matriz[2][2]=='O' && matriz[3][1]=='O') venceu=1;

jogada++; //incrementa as jogadas

if(jogada > 9) empate=1; //jogo empatou

}while(jogada >1 );

FIM:;

printf("DESEJA JOGAR NOVAMENTE (S/N): ");

scanf("%s",&resp);

system("cls"); //Limpa a tela para recomeçar o jogo.

}while(resp=='s' || resp=='S');

}

#include<stdio.h>

#include<stdlib.h>

int man ()

{

char matriz[3][3], valor, resp;

int linha=0, coluna=0, i=0, j=0, empate=0, venceu=0,cont=1, jogada=0, verifica[3][3];

do

{

jogada=1;empate=0;venceu=0;fflush(stdin);

for(i = 1; i < 4; i++){

for(j = 1; j < 4; j++){

matriz[j] =' '; //esvazia os vetores.

verifica[j]=' '; //esvazia os vetores.

}

}

do

{

if(jogada <= 10)

system("cls");//limpa a folha

printf("\n");

printf(" | | \n");

printf(" %c | %c | %c \n",matriz[1][1],matriz[1][2],matriz[1][3]);

printf("-----+-----+----- \n");

printf(" %c | %c | %c \n",matriz[2][1],matriz[2][2],matriz[2][3]);

printf(" | | \n");

printf("-----+-----+----- \n");

printf(" %c | %c | %c \n",matriz[3][1],matriz[3][2],matriz[3][3]);

printf(" | | \n");

printf("\n");

if(venceu==1)

{

if (jogada%2 == 0)

printf("RESULTADO: >>> \"X\" VENCEU <<<\n");

else

printf("RESULTADO: >>> \"O\" VENCEU <<<\n");

goto FIM; //termina o jogo

}

if(empate == 1)

{

printf("RESULTADO: >>> O JOGO EMPATOU <<<\n");

goto FIM; //termina o jogo

}

if(jogada % 2 != 0) //Impar = jogador 1, Par = jogador 2.

{

printf("VEZ DO JOGADOR 1= 'X'\n");

valor= 'X';

}

else

{

printf("VEZ DO JOGADOR 2= 'O'\n");

valor= 'O';

}

VOLTA:;

do

{

printf("INFORME O NUMERO DA LINHA.: ");

scanf("%d",&linha);

if(linha > 3) printf("O numero da linha nao pode ser maior que 3.\n");

if(linha < 1) printf("O numero da linha nao pode ser menor que 1.\n");

}while(linha > 3 || linha < 1);

do

{

printf("INFORME O NUMERO DA COLUNA: "); scanf("%d",&coluna);

if(coluna > 3) printf("O numero da coluna nao pode ser maior que 3.\n");

if(coluna < 1) printf("O numero da coluna nao pode ser menor que 1.\n");

}while(coluna > 3 || coluna < 1);

if(verifica[linha][coluna]==1) //verifica se a jogada já foi feita

{

printf(">>> Esta jogada ja foi feita!! <<<\n");

goto VOLTA;

}

else

{

matriz[linha][coluna]=valor; // coloca o valor no jogo "X" ou "O".

verifica[linha][coluna]=1; // coloca valor 1 em jogadas já feitas

}

//VERIFICA LINHAS.

if(matriz[1][1]=='X' && matriz[1][2]=='X' && matriz[1][3]=='X') venceu=1;

if(matriz[2][1]=='X' && matriz[2][2]=='X' && matriz[2][3]=='X') venceu=1;

if(matriz[3][1]=='X' && matriz[3][2]=='X' && matriz[3][3]=='X') venceu=1;

if(matriz[1][1]=='O' && matriz[1][2]=='O' && matriz[1][3]=='O') venceu=1;

if(matriz[2][1]=='O' && matriz[2][2]=='O' && matriz[2][3]=='O') venceu=1;

if(matriz[3][1]=='O' && matriz[3][2]=='O' && matriz[3][3]=='O') venceu=1;

//VERIFICA COLUNAS.

if(matriz[1][1]=='X' && matriz[2][1]=='X' && matriz[3][1]=='X') venceu=1;

if(matriz[1][2]=='X' && matriz[2][2]=='X' && matriz[3][2]=='X') venceu=1;

if(matriz[1][3]=='X' && matriz[2][3]=='X' && matriz[3][3]=='X') venceu=1;

if(matriz[1][1]=='O' && matriz[2][1]=='O' && matriz[3][1]=='O') venceu=1;

if(matriz[1][2]=='O' && matriz[2][2]=='O' && matriz[3][2]=='O') venceu=1;

if(matriz[1][3]=='O' && matriz[2][3]=='O' && matriz[3][3]=='O') venceu=1;

//VERIFICA DIAGONAIS.

if(matriz[1][1]=='X' && matriz[2][2]=='X' && matriz[3][3]=='X') venceu=1;

if(matriz[1][3]=='X' && matriz[2][2]=='X' && matriz[3][1]=='X') venceu=1;

if(matriz[1][1]=='O' && matriz[2][2]=='O' && matriz[3][3]=='O') venceu=1;

if(matriz[1][3]=='O' && matriz[2][2]=='O' && matriz[3][1]=='O') venceu=1;

jogada++; //incrementa as jogadas

if(jogada > 9) empate=1; //jogo empatou

}while(jogada >1 );

FIM:;

printf("DESEJA JOGAR NOVAMENTE (S/N): ");

scanf("%s",&resp);

system("cls"); //Limpa a tela para recomeçar o jogo.

}while(resp=='s' || resp=='S');

}

.

Para limpar vetor

.

"....matriz[j] =' '; //esvazia os vetores.

verifica[j]=' '; //esvazia os vetores."

.

Postado

@padita: obrigado pela ajuda, resolvi aqui criando uma variavel do tipo char chamada limpa e, ao final do programa, rodar um for fazendo com que as posições do vetor usadar recebessem tal variavel ficando na ideia algo assim:


include "iostream"
int main(){
int i;
char vet[10],limpa;
for(i=0;i<10;i++){ //Entra com 10 valores no vetor e imprime os 10
cin>>vet[i];
cout<<vet[i];
}
for(i=0;i<10;i++) // Apaga os valores do vetor
vet[i]=limpa;
system("pause");
return 0;
}

Grato.

Postado

O seu vetor de char não está sendo totalmente alocado.


for(i=0;i<9;i++); // só vai incrementar a variavel i até 8
*vet[i] = (char *)malloc(sizeof(char)); // vai alocar memória apenas para a posição 9

Você deve trocar para:


for(i=0;i<9;i++)
*vet[i] = (char *)malloc(sizeof(char));

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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