Ir ao conteúdo
  • Cadastre-se
Guilherme Sixe

Arquivos e string.

Recommended Posts

2)Crie uma função que coloque o número 1 em uma matriz, nas posições indicadas por um arquivo txt. A função possui o seguinte protótipo:

- void leArquivo(char nome[ ], int matriz[ ][5]);

- O parâmetro “nome” indica o nome do arquivo que será aberto.

- O arquivo possui apenas dois caracteres em cada linha, seguindo o modelo do trabalho final:

Ex:     

A1

B2

D4  

 

Cada letra fica responsavel por uma linha da matriz. A =0, B=1  e assim por diante.

O parâmetro “matriz” é uma matriz preenchida somente com zeros.

 

Eu consigo colocar os números na linha certa, mas na hora de ler o segundo caractere da string (para poder alocar na coluna), ele pega lixo e não o numero certo. Se puderem, deem uma olhada no meu codigo.

Obs: Na hora de ler o segundo caractere da string, quando substituo a variável coordenada[1] por coordenada[2], que por sinal nao existe, ele aloca os numeros "1" na primeira coluna, incorretamente. O problema é, nao consigo ler o segundo caractere da string da forma int para poder alocar na coluna certa. Como posso fazer isso?. Obrigado.

 

#include<stdio.h>
#include<stdlib.h>
void leArquivo(char nome[], int matriz[][5]);
int main(){
	char nome[200] = {"Questao 2 Slide.txt"};
	int matriz[5][5], i, j;
	
	for(i=0;i<5;i++){
		for(j=0;j<5;j++){
			matriz[i][j]=0;
		}
	}
	leArquivo(nome, matriz);
	system("pause");
	return 0;
}

void leArquivo(char nome[], int matriz[][5]){
	FILE *f;
	char coordenada[2];
	int i, x, y, linha, b=0;
	f=fopen(nome, "r");
	
	if(f==NULL){
		perror("Erro!");
		exit(-1);
	}
	
	while(fscanf(f, "%s", &coordenada)!=EOF){
		printf("Coordenadas %d = %s\n", b, coordenada); 
		b++;	
		if(coordenada[0]=='A'){
		linha=0;	
		}
		if(coordenada[0]=='B'){
			linha=1;
		}
		if(coordenada[0]=='C'){
			linha=2;
		}
		if(coordenada[0]=='D'){
			linha=3;
		}
		if(coordenada[0]=='E'){
			linha=4;
		}	
		for(x=0;x<5;x++){
			for(y=0;y<5;y++){
				matriz[linha][coordenada[1]]=1;
			}
		}		
	}
	printf("\n\n\n\n\n");
	for(x=0;x<5;x++){
		printf("\n");
		for(y=0;y<5;y++){
			printf("%d ", matriz[x][y]); 
		}
	}	
	fclose(f);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite @Guilherme Sixe

Existe um erro de lógica, não de lógica mais de conceito entenda que "1" é diferente de 1, ou seja o numeral 1 capturado através da função é o char '1' e não o número 1 de fato;

matriz[linha][coordenada[1]]=1;

Sendo entendemos que a função alimento o vetor coordenado com tipos char e não tipo int, para solucionar deveria converte o tipo antes de armazenar ou alterar o froms string da função fscanf(formats, ... );

Para um mascara do tipo de dados correto ficando assim com as correções:

fscanf(f, " %c%d", coordenada, coordenada+1)

Já que é esperado um char e um numero;

É importante menciona que a mascara "%s" captura o tamanho de dados +1, ou seja, no primeiro caso como está a função captura "A1\0", logo como percebeu aconteceu o overbounds (passou dos limites) isto pode causar instabilidade e efeitos inesperados caso o programa acesse dados restritos da memória. 

  • 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

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

×