Ir ao conteúdo
  • Cadastre-se

Arquivos e string.


Guilherme Sixe

Posts recomendados

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);
}
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...