Ir ao conteúdo
  • Cadastre-se
Angelij

C Manipulação de matriz em arquivo.txt

Recommended Posts

Preciso fazer a leitura de uma matriz via teclado, somar os elementos dela e imprimir gerando um arquivo em txt que exibirá tanto a matriz como o resultado. Fiz essa matriz aí embaixo, mas ela apenas gera o arquivo matrix.txt, sendo que não exibe nada.

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *entrada;
    FILE *saida;
    
    int i, j, result=0, matrix[3][3];
    
    entrada = fopen("matrix.txt", "r");

    if(!entrada)
    {
        printf("Erro na abertura do arquivo");
        exit(0);
    }

    else if((entrada = fopen("matrix.txt", "rb")) == NULL) 
    {
        printf("Erro na abertura do arquivo");
        exit(1);
    }    
            
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
        {
            printf("Elemento[%d][%d]= ", i, j);
            scanf("%d", &matrix[i][j]);
        }
printf("\n::: Valores Digitados :::\n");

    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        printf("%d\t", matrix[i][j]);
        printf("\n");
    }
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
           matrix[i][j]=matrix[i][j]*1;
        
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
           result=result+matrix[i][j];
    }

printf("\n\nA soma dos valores e: %d\n", result);
fclose(entrada);
saida = fopen("matrix.txt", "w");

return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. Encontrei alguns erros no programa, o principal é que você está tentando usar a função printf( ) para salvar os inteiros no arquivo texto, mas a função printf só serve para imprimir coisas na tela, não para escrever em arquivos. Para salvar variáveis você tem que usar outras funções, uma delas é a função  fprintf( ). Você usa ela da seguinte forma  fprintf (  ponteiro para o arquivo  " testo como se fosse o printf  e os identificadores tipo %d %f %d " ,  aqui o nome das variaveis, que nem no printf). As vírgulas são importantes.

Outra coisa, você está usando dois ponteiros do tipo FILE, mas seria necessário apenas 1, e também você abriu varias  vezes o mesmo arquivo, isso é desnecessário. E além do mais, no inicio você esta abrindo ele para leitura "r", e leitura binario "rb". Bom você dar uma pesquisada nas diferenças.  No final você também abriu o arquivo em modo de leitura "w", isso não é o suficiente para gravar os dados, é necessario usar uma funcao como fprintf()Outra coisa que eu achei estranho é o foi isso:

2 horas atrás, Angelij disse:

 for(i=0;i<3;i++)         

     for(j=0;j<3;j++)           

         matrix[j]=matrix[j]*1;

Aqui você está multiplicando tudo por 1, isso não fará diferença nenhuma.

Eu faria o código da seguinte forma:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *pArq; // apenas 1 ponteiro 
    
    int i, j, result=0, matrix[3][3];
    
    pArq = fopen("matrix.txt", "w"); // cria um arquivo chamado "matrix.txt" e o abre na forma de leitura ( write )
    // caso ja exista um arquivo chamado "matrix.txt" o arquivo antigo será excluido
    // atribui o local da memoria do inicio do arquivo para o ponteiro pArq. Esse valor vai aumentando conforme usam-se funções 
    // de escrita ou leitura de arquivo.
    
  

    if( pArq == NULL ){
    	printf("\nerro ao abrir o arquivo 'matrix.txt'\n");
    	exit(1);
	}  
            
    for(i=0;i<3;i++)
	{
        for(j=0;j<3;j++)
        {
            printf("Elemento[%d][%d]= ", i, j);
            scanf("%d", &matrix[i][j]);
        }
	}	
//  printf("\n::: Valores Digitados :::\n"); para escrever isso no arquivo pode ser feito o seguinte:
	fprintf(pArq, "\n::: Valores Digitados :::\n");
	
    for(i=0;i<3;i++) // esse for salva os valores da matriz,  no arquivo matrix.txt
    {
        for(j=0;j<3;j++)
		{
       		fprintf( pArq,"%d\t", matrix[i][j]);
        printf("\n");
   		}
   		fprintf( pArq,"\n");
    }
   
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
           result=result+matrix[i][j];
    }
	fprintf( pArq , "\n\nA soma dos valores e: %d\n", result); // salva o texto digitado e a soma dos valores no arquivo "matrix.txt"
	fclose(pArq); // fecha o arquivo para o qual pArq aponta, no caso "matrix.txt". 
return 0;
}

Espero ter ajudado, e não desanime, esses negócios de programação são complicados mesmo.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 09/11/2018 às 10:27, Arthur Vandellay disse:

Olá. Encontrei alguns erros no programa, o principal é que você está tentando usar a função printf( ) para salvar os inteiros no arquivo texto, mas a função printf só serve para imprimir coisas na tela, não para escrever em arquivos. Para salvar variáveis você tem que usar outras funções, uma delas é a função  fprintf( ). Você usa ela da seguinte forma  fprintf (  ponteiro para o arquivo  " testo como se fosse o printf  e os identificadores tipo %d %f %d " ,  aqui o nome das variaveis, que nem no printf). As vírgulas são importantes.

Outra coisa, você está usando dois ponteiros do tipo FILE, mas seria necessário apenas 1, e também você abriu varias  vezes o mesmo arquivo, isso é desnecessário. E além do mais, no inicio você esta abrindo ele para leitura "r", e leitura binario "rb". Bom você dar uma pesquisada nas diferenças.  No final você também abriu o arquivo em modo de leitura "w", isso não é o suficiente para gravar os dados, é necessario usar uma funcao como fprintf()Outra coisa que eu achei estranho é o foi isso:

Aqui você está multiplicando tudo por 1, isso não fará diferença nenhuma.

Eu faria o código da seguinte forma:


#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *pArq; // apenas 1 ponteiro 
    
    int i, j, result=0, matrix[3][3];
    
    pArq = fopen("matrix.txt", "w"); // cria um arquivo chamado "matrix.txt" e o abre na forma de leitura ( write )
    // caso ja exista um arquivo chamado "matrix.txt" o arquivo antigo será excluido
    // atribui o local da memoria do inicio do arquivo para o ponteiro pArq. Esse valor vai aumentando conforme usam-se funções 
    // de escrita ou leitura de arquivo.
    
  

    if( pArq == NULL ){
    	printf("\nerro ao abrir o arquivo 'matrix.txt'\n");
    	exit(1);
	}  
            
    for(i=0;i<3;i++)
	{
        for(j=0;j<3;j++)
        {
            printf("Elemento[%d][%d]= ", i, j);
            scanf("%d", &matrix[i][j]);
        }
	}	
//  printf("\n::: Valores Digitados :::\n"); para escrever isso no arquivo pode ser feito o seguinte:
	fprintf(pArq, "\n::: Valores Digitados :::\n");
	
    for(i=0;i<3;i++) // esse for salva os valores da matriz,  no arquivo matrix.txt
    {
        for(j=0;j<3;j++)
		{
       		fprintf( pArq,"%d\t", matrix[i][j]);
        printf("\n");
   		}
   		fprintf( pArq,"\n");
    }
   
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
           result=result+matrix[i][j];
    }
	fprintf( pArq , "\n\nA soma dos valores e: %d\n", result); // salva o texto digitado e a soma dos valores no arquivo "matrix.txt"
	fclose(pArq); // fecha o arquivo para o qual pArq aponta, no caso "matrix.txt". 
return 0;
}

Espero ter ajudado, e não desanime, esses negócios de programação são complicados mesmo.

 

adicionado 4 minutos depois

Boa noite  Arthur Vandellay!

 

Após visualizar seu código entendi perfeitamente quando usar "fprintf". Eu havia visto algumas vídeo aulas, mas não havia ficado claro do quando usar tal função.

 

Muito agradecida,

 

Angélica

  • Curtir 1

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

×