Ir ao conteúdo
  • Cadastre-se

C Ler matriz de um arquivo texto


Posts recomendados

Estou lendo uma matriz de char de um arquivo texto, porém não quero armazenar na matriz o '\n', como faço para ignorá-lo? 

Exemplo de matriz que está no arquivo:

. . x . . . .
. . - . . . .
. . . . x . .
. . . - . . .
. . x x . . .
. . . . . . .

Achei que daria certo porquê pensei que o fscanf não leria o \n, mas quando imprimi essa matriz, tava quebrando linha e ainda faltou alguns caracteres, e acho que espaços pra eles o caractere '\n' ocupou.

Meu código para a leitura tá assim:

for(int i = 0; i < n; i++){
		for (int j = 0; j < m; j++){
			fscanf(leitura, "%c", &c);
			if(c != ' '){
				matriz[i][j] = c;
			}else{
				j--;
			}
		}
	}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Danielle Emely  Eu não sei como ignorar mas vou te falar uma forma alternativa para fazer caso ninguém mais responda.
Você pode apagar a última linha de um char dessa forma
 

 CHAR_AQUI[x][(strlen(CHAR_AQUI[x])-1)] = '\0';


Segue um exemplo:
 

char CHAR_AQUI[100];
//...
if(CHAR_AQUI[(strlen(CHAR_AQUI)-1)] == '\n')
            {
              CHAR_AQUI[(strlen(CHAR_AQUI)-1)] = '\0';
            }

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Danielle Emely      no arquivo sempre tem um \n no final de cada linha , e o scanf lê no arquivo até encontrar um \n ou um  espaço   ' '  ,  então na leitura você precisa continuar a ler a mesma linha até encontrar esse \n para pular e ler na próxima linha ,  então seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <string.h>
int j,i,n=6,m=14,flag,l,k;
char c,matriz[6][8];
int main(){
    FILE *leitura=fopen("matriz.txt","r");
        for(i=0; i < n; i++){
            flag=1;k=0;
		    for(j=0; j < m; j++){
                fscanf(leitura, "%c", &c);
                if(c==EOF) break;
                if(c=='\0'||c=='\n' ){flag=0;break;}
                if(c!=' ' && c!='\0' && c!='\n'){
                    if(c==' ')printf("espaco\n");
                    matriz[l][k]=c;
                    k++;
                }
                matriz[l][k]='\0';
		    }
		    l++;
		    if( flag ){
                while(fscanf(leitura,"%c",&c)!=EOF){/* pular para outra linha */
                    if(c=='\n'){
                        flag=0;
                        break;
		            }
		        }
		    }
	    }
	    fclose(leitura);
	    printf("Na Matriz :\n\n");
	    for(j=0;j<n;j++){
            printf("%s\n",matriz[j]);
	    }
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@isrnick nem imprime a matriz, também achei que era pra funcionar :( 

mas consegui uma solução. muito obrigada @devair1010 

a solução que encontrei foi essa:

for(int i = 0; i < n; i++){
		for (int j = 0; j < m; j++){
			fscanf(leitura, "%c", &c);
			if(c == '.' || c == '-' || c == 'x' || c == 'X'){
				matriz[i][j] = c;
			}else{
				j--;
			}
		}
	}

no caso peguei aquilo que me interessava e o resto não armazenaria na matriz. Obrigada pela ajuda de vocês, foi muito bem vida cada uma. Agora tá tudo certinho

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!