Jump to content
Fórum Script Brasil

Question

Olá, estou fazendo seguinte programa com o objetivo simples de criar uma matriz com as dimensões dadas pelo usuário durante a execução do programa, depois preencher todos os elementos da matriz com um caractere também dado pelo usuário, e por fim exibir todos os elementos da matriz na tela. Ignorem o fato de eu não ter liberado memoria por que como disse ainda estou escrevendo o programa então falta algumas partes ainda.

Bom vamos ao que interessa "O erro", o programa esta compilando normalmente sem erros. Porem não consigo executá-lo até o final, ele trava antes de imprimir os elementos da matriz. Eu depurei o programa no visual estúdio e obtive a seguinte mensagem de erro: 

"Exception thrown at 0x00CD19CD in SQUARE.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD. If there is a handler for this exception, the program may be safely continued."

Também já consegui localizar o erro só não sei como corrigi-lo :). O erro está na hora de alocar o caractere na matriz, ou seja na função "gravar_char(void)". Desde já agradeço se poderem me ajudar.

 

OBS. se forem compilar o código em um compilador que não seja o do visual studio, alterem a função "scanf_s" por "scanf" ou então dará erro na compilação.

 

CÓDIGO:

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////             
// program name: SQUARE                                                                                             // 
// author: "I.L"                                                                                                   //
// target: criar uma matriz bidimencional com as dimenções dadas pelo usuario durante a execução do programa      //
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//libarys
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
 
//variaveis globais
int COLUNAS_MATRIZ;
int LINHAS_MATRIZ;
char **MATRIZ;
char CARACTER;

//declaraçõa das funções
void menu_inicial(void);
void menu_texturas(void);
char **Alocar_matriz_real(int linhas, int colunas);
void gravar_char(void);
void mostrar_matriz(char **vetor);
void clearbuffer(void);

//função principal (main)
int main(void)
{
	system("title SQUARE");
	menu_inicial();
	system("cls");
	menu_texturas();
	gravar_char();
	mostrar_matriz();
	cin.get();

	return 0;
}

//menu inicial //recebe as dimenções do usuario
void menu_inicial(void)
{
	//aqui é onde o usuario entra com as dimenções da matriz
	printf("\tMENU INICIAL\n\n");
	printf("Especifique o numero de colunas e o numerode linhas da matriz:\n");
	printf("colunas: ");
	scanf_s("%i", &COLUNAS_MATRIZ);
	clearbuffer();
	printf("linhas: ");
	scanf_s("%i", &LINHAS_MATRIZ);
	clearbuffer();

	//gerando a matriz
	MATRIZ = Alocar_matriz_real(LINHAS_MATRIZ, COLUNAS_MATRIZ);
}

//menu texturas // da ao usuario a opção de escolher um caracter para peencher sua matriz
void menu_texturas(void)
{
	int escolha;
  
  	//LISTA DE TESTURAS
    char text_01 = -78;
    char text_02 = -79;
    char text_03 = -80;
    char text_04 = 36;
    char text_05 = 35;
    char text_06 = 38;
    char text_07 = 64;
    char text_08 = -37;
    char text_09 = -36;
    char text_10 = -50;

	printf("\t TEXTURAS\n\n");
	printf("Escolha uma textura para seu quadrado:");
	printf("\n\n");
	printf(" _____    _____    _____    _____    _____    _____    _____    _____    _____    ______\n");
	printf("|  1  |  |  2  |  |  3  |  |  4  |  |  5  |  |  6  |  |  7  |  |  8  |  |  9  |  |  10  |\n");
	printf("|     |  |     |  |     |  |     |  |     |  |     |  |     |  |     |  |     |  |      |\n");
	printf("|  %c  |  |  %c  |  |  %c  |  |  %c  |  |  %c  |  |  %c  |  |  %c  |  |  %c  |  |  %c  |  |  %c   |\n", text_01, text_02, text_03, text_04, text_05, text_06, text_07, text_08, text_09, text_10);
	printf("|_____|  |_____|  |_____|  |_____|  |_____|  |_____|  |_____|  |_____|  |_____|  |______|\n\n\t\t\t\tEscolha: ");
	scanf_s("%i", &escolha);
	clearbuffer();

	while (true)
	{


		if (escolha <= 0 || escolha > 10)
		{
			printf("\n");
			while (escolha <= 0 || escolha > 10)
			{
				printf("Erro, valor %i nao permitido! ", escolha);
				scanf_s("%i", &escolha);
				clearbuffer();

			}
		}
		break;
	}


	switch (escolha)
	{
	case 1:
		CARACTER = text_01;
		break;

	case 2:
		CARACTER = text_02;
		break;

	case 3:
		CARACTER = text_03;
		break;

	case 4:
		CARACTER = text_04;
		break;

	case 5:
		CARACTER = text_05;
		break;

	case 6:
		CARACTER = text_06;
		break;

	case 7:
		CARACTER = text_07;
		break;

	case 8:
		CARACTER = text_08;
		break;

	case 9:
		CARACTER = text_09;
		break;

	case 10:
		CARACTER = text_10;
		break;

	default:
		printf("\nErro desconhecido!");
		cin.get();
		break;
	}
}

//função que gera a matriz com as dimenções que o usuario passou
char **Alocar_matriz_real(int linhas, int colunas)
{
	if (linhas < 1 || colunas < 1) { /* verifica parametros recebidos */
		printf("** Erro: Parametro invalido **\n");
		return (NULL);
	}
	/* aloca espaço na memoria para a matriz */
	char **matriz_aux = (char **)malloc((5 * sizeof(char *)) - 1);

	if (matriz_aux == NULL) {
		printf("** Erro: Memoria Insuficiente **");
		return (NULL);
	}
	return(matriz_aux);
}

//função que aloca o caracter inserido pelo usuario
void gravar_char(void)
{
	//loop que vai alocar o caracter passado pelo usuario em cada elemento da matriz
	for (int linhas = 0; linhas < LINHAS_MATRIZ; ++linhas)
	{
		for (int colunas = 0; colunas < COLUNAS_MATRIZ; ++colunas)
		{
			MATRIZ[linhas][colunas] = (char)CARACTER;
		}
	}
}

//função que inprime na tela todos os elementos da matriz
void mostrar_matriz(char **vetor)
{
    printf("\tRESULTADO\n\n");
    
    printf("Quadrado gerado: \n\n");
    
    for (int linhas = 0; linhas < LINHAS_MATRIZ; ++linhas)
    {
        for (int colunas = 0; colunas < COLUNAS_MATRIZ; ++colunas)
        {
            printf("%c", vetor[linhas][colunas]);
        }
        printf("\n");
    }
}

//limpa o buffer
void clearbuffer(void)
{
	char c;
	while ((c = getchar() != '\n' && c != EOF));
}

   

Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...