Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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

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

@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

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!