Ir para conteúdo

POWERED BY:

Arquivado

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

johnny-walker

Erro ao fazer um looping (access violation)

Recommended Posts

Olá pessoal é meu primeiro post neste fórum e sou newbie em c/c++, então estou tendo alguma dificuldade, pois venho da lingugaem pascal do delphi e senti um pouco de dificuldade em certos padrões da linguagem c++ quie é bem diferente do pascal.

 

Bem meu problema é no looping para mostrar dois nomes de um array de char, abaixo o código

Já adicionei strings.h e nada, utilizo a IDE code:blocks e compilador gcc.

Este é um programa de teste que fiz para ver se conseguia ver o que estava acontecendo e resolver o problema.

 

#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;
char *XO[2] = {"X", "O"};
char *Jogo[3][3];
char *Jogadores[2];
int I, J;
int main(void)
{
    /*
    Jogo[3][3] = "X";
    printf("\n");
    printf("[2, 2] %S\n", Jogo[2][2]);
    printf("\n");
    */

    //std::strcpy(Jogo[0][0],  XO[0]);
    Jogo[0][0] = "X";
    Jogo[0][1] = "X";
    Jogo[0][2] = "X";

    Jogo[1][0] = "O";
    Jogo[1][1] = "O";
    Jogo[1][2] = "O";

    Jogo[2][0] = "X";
    Jogo[2][1] = "X";
    Jogo[2][2] = "X";

    //Jogadores[0] = "Johnny Walker";
    //Jogadores[1] = "Brave Heart";
    for (I=0; I<=1; I++)
    {
        printf("Entre com o jogador %d: ", I+1);
        scanf("%s", &Jogadores[I]);

    }

    printf("--------------------------------------------------------------------------------------\n");
    // =====>>>> O Erro acontece aqui nos loopings, mas não sei o porquê
    for (J=0; J<=1; J++)
    {
        printf("Jogador %d %s (%s)\n.", J, Jogadores[J], XO[J]);
    }
    printf("\n");


    for (I=0; I<=1; I++)
    {
        printf("Jogador %s jogara com (%s).\n", Jogadores[I], XO[I]);
    }


    printf("\n");
    printf("\n");
    printf(" %s | %s | %s \n", Jogo[0][0], Jogo[0][1], Jogo[0][2]);
    printf("--------------\n");
    printf(" %s | %s | %s \n", Jogo[1][0], Jogo[1][1], Jogo[1][2]);
    printf("--------------\n");
    printf(" %s | %s | %s \n", Jogo[2][0], Jogo[2][1], Jogo[2][2]);

    printf("\n");
    printf("XO %s\n", XO[0]);
    printf("X1 %s\n", XO[1]);
    printf("Jogo %s\n", Jogo[0][0]);

    system("PAUSE");
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

@@johnny-walker

 

Olhe esse exemplo de código e sintaxe.

 

#include <stdlib.h>
#include <stdio.h>
#include <string.h>


int main(void)
{
    //variaveis
    int i,j;
    char jogador1[20], jogador2[20];
    char xo[2] = {'x', 'o'};
    char jogo[3][3];

    //recebe nomes
    printf("Nome jogador 1: ");
    fgets(jogador1,20,stdin); //ou fgets(jogador1) ou scanf("%s", &jogador1)
    printf("Nome jogador 2: ");
    fgets(jogador2,20,stdin); //ou fgets(jogador2) ou scanf("%s", &jogador2)

    //tabela
    printf("\n");
    
    jogo[0][0] = 'x';
    jogo[0][1] = 'x';
    jogo[0][2] = 'x';
    jogo[1][0] = 'o';
    jogo[1][1] = 'o';
    jogo[1][2] = 'o';
    jogo[2][0] = 'x';
    jogo[2][1] = 'x';
    jogo[2][2] = 'x'; /* obs: Aspas simples '' = caractere, Aspas duplas "" == string. */

    //imprime tabela
    for (i=0; i<3; i++)
    {
        for (j=0; j<3; j++)
        {
            printf("%c ", jogo[i][j]);
        }
        printf("\n");
    }


    //imprime
    printf("\nNome jogador 1: %s (%c)", jogador1, xo[0]);
    printf("\nNome jogador 2: %s (%c)", jogador2, xo[1]);

    return 0;
}

 

brHUE

Compartilhar este post


Link para o post
Compartilhar em outros sites

O engraçado é que quando acrescento o caracter "&" dá certo, mas a saída é corrompida, parece ser algo simples de resolver.

 

 

    for (J=0; J<=1; J++)
    {
        printf("Jogador %d %s jogara com (%c).\n", J+1, &Jogadores[J], XO[J]);
    }


Bem, vou simplificar por enquanto e ver este erro mais tarde, se alguém puder me explicar o pq, pois como disse eu venho do pascal e isto é bem simples no mesmo.

 

 

bye

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha opinião: Inviável trabalhar com strings/char nesse caso. Uma sugestão:

0 = posições que ainda podem ser ocupadas.

1 = posições que o jogador 1 ocupou

2 = posições que o jogador 2 ocupou.

Assim você trabalha com números inteiros, sem complicar. E na hora de exibir, você checa qual valor está na posição da matriz. Se for "0", mostra um espaço vazio; sendo 1 mostra um "X" ou sendo 2 mostra um "O".

 

#include <stdio.h>
#define MAX 3

int main (void)
{
	int matriz[MAX][MAX];
	int player1 = 1, player2 = 2;
	
	for (int i = 0; i < MAX; i++)
	   for (int j = 0; j < MAX; j++)
	      matriz[i][j] = 0;
			
	// exemplo de jogadas;
	matriz[0][0] = player1;
	matriz[0][1] = player1;
	matriz[0][2] = player1;
	matriz[1][0] = player2;
	matriz[1][1] = player2;
	
	// exibição;
	for (int i = 0; i < MAX; i++) {
	   for (int j = 0; j < MAX; j++){
	      switch (matriz[i][j]) {
	         case 0: printf("   "); break;
		 case 1: printf(" X "); break;
		 case 2: printf(" O "); break;
	      }
	      if (j < (MAX - 1)) // só para mostrar a barra entre os caracteres
	         printf(" | ");
	   }
	   printf("\n");
	}
	return 0;
}

Lembrando: sugestão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.