Manipulação de conteúdos de arquivos e gravar em uma matriz

1. Manipulação de conteúdos de arquivos e gravar em uma matriz

Jessica Dias Rodrigues
jeh_dias

(usa Ubuntu)

Enviado em 16/12/2012 - 16:29h

Olá,boa tarde.

Eu estou lendo o conteúdo de um arquivo e preciso gravar este conteúdo em uma matriz,porém está com alguns erros.
Obrigada pela ajuda.

O código.



#include <stdio.h>
#include <stdlib.h>

using namespace std;

int main() { // Aqui não sei qual parâmetro tenho que passar

int i,j;
int matriz1[10][10];


FILE *fp ;
fp = fopen("matriz1.txt","r");

if(fopen("matriz1.txt","r")==NULL){
perror("Erro ao abrir o arquivo.\n");
return 1;
}else{
printf("Arquivo aberto p/ leitura.\n");
for(i=0;i<10;i++){
for(j=0;j<10;j++)
fscanf(fp," %d ", &matriz1[i][j]);
fprintf( " matriz1[%d][%d] = %d ”,matriz1[i][j]);
}
}
}
fclose(fp);
printf ("%s\n","Arquivo fechado");

return 0;
}


  


2. Re: Manipulação de conteúdos de arquivos e gravar em uma matriz

Marcos Paulo Ferreira
daemonio

(usa Slackware)

Enviado em 16/12/2012 - 18:13h

Para gravar e ler um elemento da matriz utilize indexação dupla.

ex:
fscanf(fp,"%d ", &matriz1[ i ][ j ]);

(obs: ao se postar colchetes juntos o próprio vol retira parte do conteúdo - seria o seu caso?)

Em seguida modifique a chamada de fprintf para somente printf, se o objetivo é somente mostrar uma string na tela.

Abaixo um código modificado que parece funcionar perfeitamente:


#include <stdio.h>
#include <stdlib.h>

int main() { // Aqui não sei qual parâmetro tenho que passar

int i,j;
int matriz1[10][10];


FILE *fp ;
fp = fopen("matriz1.txt","r");

if(fopen("matriz1.txt","r")==NULL){
perror("Erro ao abrir o arquivo.\n");
return 1;
}else{
printf("Arquivo aberto p/ leitura.\n");
for(i=0;i<10;i++){
for(j=0;j<10;j++) {
fscanf(fp,"%d ", &matriz1[i][j]);
printf("matriz1[%d][%d] = %d\n", i, j, matriz1[i][j]);
}
}
}
fclose(fp);
printf ("%s\n","Arquivo fechado");

return 0;
}


Lembrando que o arquivo matriz1.txt deve estar assim:
1 2 3 4 5 6 7 ... 1000

ou seja: <número><espaço><número>

Teste aí e diga se funcionou.

t+


3. Re: Manipulação de conteúdos de arquivos e gravar em uma matriz

Jessica Dias Rodrigues
jeh_dias

(usa Ubuntu)

Enviado em 16/12/2012 - 18:21h

Rodou sim , eu tentei resolver o problema em uma matriz 2 x 3.
Ai o arquivo "matriz1.txt" está assim ,

2linhas 3colunas
2 2 1
2 2 0

E modifiquei as dimensões no seu código e compilou assim ...
Arquivo aberto p/ leitura.
matriz1[0][0] = 134514297
matriz1[0][1] = 2604221
matriz1[0][2] = 3867428
matriz1[1][0] = 3866612
matriz1[1][1] = -1073977944
matriz1[1][2] = 2604341
Arquivo fechado

Acho que expliquei errado a minha dúvida.


4. Re: Manipulação de conteúdos de arquivos e gravar em uma matriz

Marcos Paulo Ferreira
daemonio

(usa Slackware)

Enviado em 17/12/2012 - 09:59h

jeh_dias escreveu:

Rodou sim , eu tentei resolver o problema em uma matriz 2 x 3.
Ai o arquivo "matriz1.txt" está assim ,

2linhas 3colunas
2 2 1
2 2 0

E modifiquei as dimensões no seu código e compilou assim ...
Arquivo aberto p/ leitura.
matriz1[0][0] = 134514297
matriz1[0][1] = 2604221
matriz1[0][2] = 3867428
matriz1[1][0] = 3866612
matriz1[1][1] = -1073977944
matriz1[1][2] = 2604341
Arquivo fechado

Acho que expliquei errado a minha dúvida.


Ok.. usei um método mais geral na sua fscanf. O formato %*c diz para essa função ignorar qualquer caractere após um número. No nosso caso, ela ignorará tanto o espaço quanto o nova linha, assim o arquivo matriz1.txt poderá estar tanto em forma de linha quanto de coluna.

Acrescentei também as macros DIM_L e DIM_C que correspondem aos números de linhas e colunas respectivamente da matriz. Toda hora que você precisar de alterar as dimensões da matriz, altere essas macros.

O novo código é esse:


#include <stdio.h>
#include <stdlib.h>

#define DIM_L 2
#define DIM_C 3

int main() { // Aqui não sei qual parâmetro tenho que passar

int i,j;
int matriz1[DIM_L][DIM_C];


FILE *fp ;
fp = fopen("matriz1.txt","r");

if(fopen("matriz1.txt","r")==NULL){
perror("Erro ao abrir o arquivo.\n");
return 1;
}else{
printf("Arquivo aberto p/ leitura.\n");
for(i=0;i<DIM_L;i++){
for(j=0;j<DIM_C;j++) {
fscanf(fp,"%d%*c", &matriz1[i][j]);
printf("matriz1[%d][%d] = %d\n", i, j, matriz1[i][j]);
}
}
}
fclose(fp);
printf ("%s\n","Arquivo fechado");

return 0;
}





5. Manipulação de conteúdos de arquivos e gravar em uma matriz

Jessica Dias Rodrigues
jeh_dias

(usa Ubuntu)

Enviado em 17/12/2012 - 14:23h

Continua a exibição da matriz , com números negativos.Provavelmente deve ser lixo.


6. Re: Manipulação de conteúdos de arquivos e gravar em uma matriz

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/12/2012 - 14:53h

Qual compilador que você usa?

Sua descrição tem toda a cara de que você está errando o tipo do argumento passado a fscanf() (tem certeza de que você não esqueceu de colocar o operador "&" antes da designação do elemento da matriz? -- deveria ficar assim: &matriz[i][j]).

Este é um tipo de erro que o compilador poderia indicar para você, desde que você habilite o diagnóstico apropriado. Só que esse diagnótico não é feito por default porque, historicamente, o C é uma linguagem de baixo nível que assume que o programador sabe o que está fazendo.

Se você estiver usando GCC, eu sempre recomendo ligar as seguintes opções de diagnóstico de código: "-O2 -Wall -Werror -pedantic". Mas note: isso não vai resolver o problema, mas apenas indicar partes do código onde é fácil para o compilador identificar código potencialmnte problemático.


7. Re: Manipulação de conteúdos de arquivos e gravar em uma matriz

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/12/2012 - 17:39h

Outra coisa: edite sua mensagem original e coloque em volta do seu código as tags [code] e [/code]. Além de rendereizar o texto de modo diferenciado, fará com que o i entre colchetes ([i]), que você usou para indexar a matriz, não seja interpretado como marcador de texto em itálicos.


8. Re: Manipulação de conteúdos de arquivos e gravar em uma matriz

Marcos Paulo Ferreira
daemonio

(usa Slackware)

Enviado em 18/12/2012 - 14:04h

jeh_dias escreveu:

Continua a exibição da matriz , com números negativos.Provavelmente deve ser lixo.


Poste o conteúdo de seu matriz1.txt


9. Re: Manipulação de conteúdos de arquivos e gravar em uma matriz

Jessica Dias Rodrigues
jeh_dias

(usa Ubuntu)

Enviado em 18/12/2012 - 18:00h

Obrigada pelas dicas , vou utilizar o code ,pois não conhecia.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts