Ir ao conteúdo
  • Cadastre-se
andre.paris

Leitura de Arquivos em C

Recommended Posts

Olá a todos,

Preciso de fazer um trabalho em C para armazenar alguns números que estão em um arquivo no formato .mtx. No entanto, meu problema é como fazer isso. Veja bem, no arquivo esses números encontram-se na seguinte disposição:

1 21 12

1 13 -1

1 50 1

1 60 -1

E assim por diante...

Tentei fazer com as funções fgetc, fgets e fscanf. Mas elas pegavam apenas o primeiro valor, no caso o 1, ou então a linha inteiro como um string, dependendo da função que usei. No caso da fgets, que pega toda linha, tentei usar a função atoi, fazendo numero = atoi(string[0]), uma vez que converteria primeiro o 1, dps eu faria isso para o 21 e ... Mas não é possível colocar indice dentro da atoi e eu teria o problema com numeros como 21 e numeros negativos, pois representam dois indices, além disso, o arquivo .mtx nem sempre contem o 1 como primeiro valor, podendo conter qql outro como 12, ou seja, eu poderia ter uma primeira linha como sendo 12 1 20, ou qql outra disposição.

Parece bem díficil, mas tem algo que não estou enxergando.

Agradeço a quem souber e puder postar ou me enviar a solução por e-mail.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode pegar uma linha inteira com fgets(), depois usá-la uma sscanf() que é como se fosse um scanf mas em uma string();

sscanf(str, "%d %d %d", &x, &y, &z);

ou usar o fscanf com múltiplos parametros: fscanf(fp, "%d %d %d", &x, &y, &z);

Compartilhar este post


Link para o post
Compartilhar em outros sites
você pode pegar uma linha inteira com fgets(), depois usá-la uma sscanf() que é como se fosse um scanf mas em uma string();

sscanf(str, "%d %d %d", &x, &y, &z);

ou usar o fscanf com múltiplos parametros: fscanf(fp, "%d %d %d", &x, &y, &z);

Eu fiz do fscanf também. Mas o que acontece é que ele está "pulando linhas" para capturar o que quero. Eu tenho um arquivo.mtx assim:

%cabeçalho

números

Eu fiz um fgets e um if desse modo:

while(!feof(matriz)){
fgets( le_arquivo , 10000 , matriz );
if( ler_arquivo[0] == '%')
printf("Eis aqui %\n");
else
{
fscanf(matriz, "%f %f %f" ,&linha, &coluna, &valor);
printf("%f %f %f and %s\n",linha,coluna,valor,le_arquivo);
}

}

No entanto, ao invés dele começar a imprimir os valores imediatamente abaixo da ultima linha com o %, ele está "doidão", começa a imprimir o valor dos numeros abaixo de outros e sem sequencia. Não entendo o porque.

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

×