Estou tendo dificuldade em um programa onde tenho que ler um arquivo .mtx vindo da internet que possui dados de uma matriz qualquer, onde todos esses arquivos tem um cabeçalho que começa com o símbolo de porcentagem(%). Estava pensando em fazer uma comparação do primeiro caractere da linha com o símbolo "%" e que se fosse verdade, começasse a ler a linha logo abaixo no arquivo ( como eu passo para a leitura da próxima linha ignorando o resto da linha de onde encontrei o % como primeiro caractere).
O código ainda está no início do desenvolvimento mas é o que tem:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Funções
struct inf_matriz{
char nome[30];
int m;
int n;
int nnz;
};
struct inf_matriz tela_inicial(){
struct inf_matriz retornainf;
char ch, ch2 ='%';
printf("-----------------------------------------\n");
printf(" Trabalho de Algoritmos Numericos\n");
printf("-----------------------------------------\n");
AQUI: printf("\nDigite o nome do arquivo da matriz a ser carregada(com .mtx):\n");
scanf("\n%[^\n]", retornainf.nome);
FILE *arq_matriz = fopen(retornainf.nome,"r");
if(arq_matriz == NULL){
printf("Arquivo nao encontrado ou nao existente! Tente novamente.");
goto AQUI;
}
else{
fscanf(arq_matriz,"%c", &ch);
printf("%c", ch);
if(ch == ch2){
// como pula pra próxima linha ( lendo os número 3312 3312 20793 do exemplo do arquivo abaixo)?
}
fscanf(arq_matriz,"%d %d %d", &retornainf.m, &retornainf.n, &retornainf.nnz);
fclose(arq_matriz);
return retornainf;
}
}
int main(){
struct inf_matriz dadosA;
dadosA = tela_inicial();
printf("\n-----------------------------------------\n");
printf(" Dados da Matriz '%s' aberta:\n", dadosA.nome);
printf(" m:%d\n"" n:%d\n" " nnz:%d\n", dadosA.m, dadosA.n, dadosA.nnz);
printf("-----------------------------------------\n");
double **matrizA;
matrizA = (double**)calloc(dadosA.n,sizeof(double*));
return 0;
}
OBS: não consigo mandar os arquivos de texto das matrizes por serem de formato ''.mtx'', mas o padrão dos arquivos é mais ou menos como o abaixo:
%%MatrixMarket matrix coordinate real general
3312 3312 20793
1 1 1.0000000000000e+00
2 2 1.0000000000000e+00
3 3 1.0000000000000e+00
4 4 1.0000000000000e+00
5 5 1.0000000000000e+00
6 6 1.0000000000000e+00
...