Ir ao conteúdo
  • Cadastre-se

Angelij

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

posts postados por Angelij

  1. Digitei o código abaixo exatamente como está em meu livro, acontece que esse código não está compilando e não consigo identificar o erro. Revisei o código todo acompanhando o livro e nada de encontrar problema.

     

    Se alguém puder me ajudar fico agradecida!

    #include <stdio.h>
    #include <stdlib.h>
    
    struct Registro_Carro
    {
    	char Placa[7];
    	char Modelo[30];
    	char Cor[30];
    	int ano;
    };
    
    void Grava_Dados(struct Registro_Carro Vetor_Carros[100])
    {
    	int i;
    	
    	FILE *Id_Arquivo;
    	
    	if((Id_Arquivo = fopen("carros1.dat", "w")) == NULL)
    	{
    		printf("Problemas para gravar na abertura do arquivo de carros!\n");
    		exit(-1);
    	}
    	
    	i=0;
    	
    	while(i <100 && strcmp(Vetor_Carros[i].Placa, "fim") != 0)
    	{
    		if(fwrite(&(Vetor_Carros[i]), sizeof(struct Registro_Carro), 1, Id_Arquivo) == 0)
    		{
    			prinftf("Problemas na gravacao do arquivo de carros!\n");
    			exit(-1);
    		}
    		
    		i = i+1; 
    	}
    	
    	if(fclose(Id_Arquivo) != 0)
    	{
    		printf("Problemas no fechamento do arquivo de carros!\n");
    		exit(-1);
    	}
    }
    
    void Le_Dados(struct Registro_Carro *Vetor_Carros)
    {
    	int i;
    	FILE *Id_Arquivo;
    	
    	struct Registro_Carro *Carro;
    	
    	Carro = (struct Registro_Carro *) malloc(sizeof(struct Registro_Carro));
    	
    	if((Id_Arquivo = fopen("carros.dat", "r")) == NULL)
    	{
    		printf("Problemas na abertura do arquivode carros para leitura!\n");
    		exit(-1);
    	}
    	
    	i - 0;
    	
    	while(i < 100 && ! feof(Id_Arquivo))
    	{
    		fread(Carro, sizeof(struct Registro_Carro), 1, Id_Arquivo);
    		if(ferror(Id_Arquivo))
    		{
    			printf("Problemas na leitura do arquivo de carros!\n");
    			exit(-1);
    		}
    		
    		else
    		{
    			Vetor_Carros[i].ano = Carro->ano;
    			strcpy(Vetor_Carros[i].Placa, Carro->Placa);
    			strcpy(Vetor_Carros[i].Modelo, Carro->Modelo);
    			strcpy(Vetor_Carros[i].Cor, Carro->Cor);
    		}
    		
    		i = i+1;
    	}
    	if(fclose(Id_Arquivo) != 0)
    	{
    		printf("Problemas no fechamento do arquivo de carros!\n");
    		exit(-1);
    	}
    }
    
    int main()
    {
    	struct Registro_Carro *Vetor_Carros;
    	Vetor_Carros = (struct Registro_Carro *) malloc(100 * sizeof(struct Registro_Carro));
    	
    	sprintf(Vetor_Carros[0].Modelo, "mustangue");
    	sprintf(Vetor_Carros[0].Cor, "Verde");	
    	Vetor_Carros[0].ano = 75;
    	
    	sprintf(Vetor_Carros[1].Placa, "755");
    	sprintf(Vetor_Carros[1].Modelo, "gol");
    	sprintf(Vetor_Carros[1].Cor, "azul");
    	Vetor_Carros[1].ano = 1234;
    	
    	sprintf(Vetor_Carros[2].Placa, "fim");
    	sprintf(Vetor_Carros[2].Modelo, "teste");
    	sprintf(Vetor_Carros[2].Cor, "teste");
    	Vetor_Carros[2].ano = 0;
    	
    	Le_Dados(Vetor_Carros);
    	Grava_Dados(Vetor_Carros);
    }

     

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

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!