Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Leitura da matriz

Pessoal estou com um pequeno problema...

Meu código está igual ao código do professor da Aula 1- Vídeo 2, porém quando eu leio o arquivo "mapa.txt" , ele faz um leitura incorreta. Segue meu código e o resultado que recebo depois de rodar.

Esse é meu código no momento:

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

char matrix[5][10];

int main()
{
    FILE* f;
    f = fopen("mapa.txt","r");
        if (f==0){ //tratamentto de erro
            printf("Erro de leitura do arquivo do mapa! \n");
        }

    int i;
    for (i = 0; i<5; i++){
        fscanf(f,"%s",matrix[i]);
    }

    for (i = 0; i<5; i++){
        printf("%s\n",matrix[i]);
    }
    printf("\n");

    fclose(f);

    return 0;
}

Esse é o conteúdo do meu arquivo "mapa.txt":

|--------|
|...|..-.|
|.._|.@..|
|......_.|
|--------|

E esse é meu resultado:

|--------||...|..-.||.._|.@..||......_.||--------|
|...|..-.||.._|.@..||......_.||--------|
|.._|.@..||......_.||--------|
|......_.||--------|
|--------|


Process returned 0 (0x0)   execution time : 0.019 s
Press any key to continue.

Me parece que ele está lendo o arquivo, mas parece que ele não interpreta que uma linha acabou e continua a leitura de todas e coloca tudo na primeira posição. Depois o "ponteiro" faz essa varredura completa a partir da segunda linha e assim em diante...

Estou usando Code::Blocks para escrever, compilar e rodar meu código.

3 respostas

tente alterar o i < 5 para ver se resolve.

Opa Lucas tudo bem ? Alterei o valor i<5, isso está controlando quantas linhas irei ler ou printar na tela, mas o problema se manteve.

solução!

Pessoal identifiquei meu erro. Eu estava declarando a matrix dessa maneira:

char matrix[5][10];

Porém me esqueci do detalhe da "dar margem" na dimensão j da matrix para identificação do \0 que existe no final de cada string, a definição correta da matrix deveria ser:

char matrix[5][10+1];

Obrigado Lucas por ter me ajudado !