Ir ao conteúdo
  • Cadastre-se
Rikkin

Programa para ler um arquivo e colocar numa matriz

Recommended Posts

Olá pessoal,

preciso fazer um programa que leia um arquivo texto contendo uma matriz assim:

8 2 3 4 2

5 6 1 3 4

3 1 4 6 7

7 2 4 1 3

3 2 1 6 8

e guardar em uma matriz no programa. Ate agora eu fiz isso

int main(){
using namespace std;
int tamanho=0;
char linha[1300]; /* ou maior se você precisar */
FILE *arquivo;
char caminho[50];
char caminho2[50];
int l=0,c=0;

///Pegando os caminhos dos arquivos de entrada
printf("Digite o caminho do arquivo da matriz:");
gets(caminho);
printf("Digite o caminho do arquivo do vetor:");
gets(caminho2);


///Para pegar o tamanho da matriz
arquivo = fopen(caminho,"r");
if(arquivo == NULL) {
printf("arquivo desconhecido - nome_do_arquivo.txt\n");
return 0;
}
while(fgets(linha, sizeof(linha), arquivo) != NULL) {
tamanho++;
}

fclose(arquivo);

long double x[tamanho];
long double A[tamanho][tamanho];
long double b[tamanho];

///Para alocar a matriz do arquivo
arquivo = fopen(caminho,"r");

if(arquivo == NULL) {
printf("arquivo desconhecido - nome_do_arquivo.txt\n");
return 0;
}

c=0;
while(fgets(linha, sizeof(linha), arquivo) != NULL) {
for (int k=0; k<strlen(linha);k++){
if (linha[k] != ' ') {
printf("\nValor->%c", linha[k]);
printf("\nl=%d", l);
printf("\nc=%d", c);
A[l][c] = (float)linha[k];
c++;
}
}

c=0;
l++;
}

fclose(arquivo);

c=0;
l=0;

///Para o arquivo da variavel b
arquivo = fopen(caminho2,"r");

if(arquivo == NULL) {
printf("arquivo desconhecido - nome_do_arquivo.txt\n");
return 0;
}

while(fgets(linha, sizeof(linha), arquivo) != NULL) {
printf("\n\nValorB->%c", linha[0]);
b[c] = (float)linha[0];
c++;
}

printf("\n\nteste->%.0f", A[3][3]);
printf("\nteste->%.0f", b[1]);
printf("\nteste->%d", tamanho);

return 0;
}

O problema é que ele nao esta guardando os valores certos, pois quando eu printo os resultados no exemplo A[3][3] ele tras um valor absurdo

Alguem sabe o que poderia ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O placeholder do printf para pontos flutuantes do tipo long double é o %Lf F5Rua4D.gif.

Talvez você queira converter os caracteres de números em números propriamente ditos. Se sim, use a função atof.

Espero ter ajudado GbhmuXl.gif.

Compartilhar este post


Link para o post
Compartilhar em outros sites
O placeholder do printf para pontos flutuantes do tipo long double é o %Lf F5Rua4D.gif.

Talvez você queira converter os caracteres de números em números propriamente ditos. Se sim, use a função atof.

Espero ter ajudado GbhmuXl.gif.

Eu testei isso, trocando

A[l][c] = (float)strtod(split,NULL);

por:

A[l][c] = atof(strtod(split,NULL));

é assim que funciona? pois deu esse erro:

cannot convert 'double' to 'const char*' for argument '1' to 'double atof(const char*)'|

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

×