Ir ao conteúdo
  • Cadastre-se

Programa para ler um arquivo e colocar numa matriz


Rikkin

Posts recomendados

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?

Link para o comentário
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*)'|

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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