Jump to content
Fórum Script Brasil
  • 0

Problema ao gravar em arquivo.


Jessé Augusto

Question

Boa a tarde a todos!

Sou iniciante na área de desenvolvimento e estou precisando da ajuda de vocês.

É o seguinte: Estou desenvolvendo um pequeno programa de Locadora de filmes,em C.

Estou com um problema na função responsável pelo cadastro dos fillmes (CadastrarFilme).

Não sei por qual motivo esta função não está gravando no arquivo.

Se alguém poder me ajudar estarei agradecido.

Segue o código.

#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define x 3
  /*
  struct TipoDatFilme
  {
      int Dia;
      int Mes;
      int Ano;
            
  };
  */
  struct filme
  {
      char   nome[30];
      char   genero[20];
      char   atorprincipal[40];
      float  valor;
      //struct TipoDatFilme DataFilme;
            
  };
  typedef struct filme reg;
  
  
  void CadastrarFilme()
  {
    
    FILE *filme = fopen("C:\\Filmes\\filme.bin", "w+");  
    
    int continuar = 1, opcao;
    char nomefilme[40];
    reg atributos;


    system("cls");
    
    /**/
    if(!filme == NULL)
    {
          
           
           printf("\n\n==== BEM-VINDO AO CADASTRO DE FILMES ====");
                
           while(continuar==1)
           {

                printf("\n\n\n");
                printf("\n\n\   INFORME O NOME DO FILME (S - Sair):");
                gets(atributos.nome);
                
                
                if(((strcmp(atributos.nome,"S")==0)||(strcmp(atributos.nome,"s")==0)))
                {
                    continuar = 2;
                    break;
                }
                 
                printf("\n\n\   INFORME O GENERO DO FILME  (S - Sair): ");
                gets(atributos.genero);
                
                if(((strcmp(atributos.genero,"S")==0)||(strcmp(atributos.genero,"s")==0)))
                {
                    continuar = 2;
                    break;
                }
                //putc(atributos, *filme);
                
                if(fwrite(&atributos, sizeof(reg),1, filme)!=1)
                {
                   printf("ERRO NA GRAVACAO DOS DADOS");
                }
                else
                {
                    system("cls");                              
                    printf("DADOS GRAVADOS COM SUCESSO!!!  (1 - CONTINUAR / 2 - SAIR )");
                }
                
                fclose(filme);
                        
           }//while
           
                 
    }//if
    else
    {
         printf("não E POSSIVEL CADASTRAR O FILME.");
    }
   
  }//void CadastrarFilme()

  void MenuFilme()
  {
      int opcao,continuar = 4;

      while (continuar == 4)
      {
                 system("cls");                             
            do
            {
  printf ("\n\n======= GERENCIADOR DE FILMES ===============");         
                 printf ("\n\n\n    1 - CADASTRAR FILME");
                 printf ("\n\n\    2 - LISTAR FILME");
                 printf ("\n\n\    3 - BUSCAR FILME");
                 printf ("\n\n\    4 - ALTERAR  FILME");   
                 printf ("\n\n\    5 - EXCLUIR FILME");   
                 printf ("\n\n\    6 - RETORNAR AO MENU ANTERIOR: ");                
                // printf ("\n\n\n    ESCOLHA SUA OPCAO: ");                                          
                 scanf("%d",&opcao);
                 system("cls");                 
            }while(opcao < 1 || opcao > 6);
            
            if(opcao ==6)
            {
                 system("cls");
                 continuar = 3;
            }    
           
            else
            {  
                
                 switch (opcao)
                 {
              
              
                       
                       case 1:
                              CadastrarFilme();
                              break;
                              system("cls");       
                 }//switch
             
            } //else

         
      } //while
      
      
  }//void MenuFilme()

int main(int argc, char *argv[])
{

  int opcao, continuar=4;
  FILE *filme;
   
      
  // printf ("\n\n\n\n\======= MENU DE OPCAO =======");
  
   while(continuar == 4)
   {
      do
      {
         printf ("\n\n=============    SEJA BEM-VINDO   ==============\n\n");
         printf ("\n\n============ SITEMA DE LOCADORA ===============");
         printf("\n\n\n 1 - GERENCIADOR DE FILMES \n\n ");
         printf("2 - GERENCIADOR DE CLIENTES \n\n ");   
         printf("3 - GERENCIADOR DE USUARIOS \n\n ");      
         printf("4 - GERENCIADOR DE CONFIGURACOES \n\n ");               
         printf("5 - SAIR DO PROGRAMA");     
         printf("\n\n\nESCOLHA SUA OPCAO: ");     
         scanf("%d",&opcao); 
      }while(opcao < 1 || opcao > 5);
      
      if (opcao == 5)  
      {
          continuar = 3;
      }
      else 
      {
            switch (opcao)
            {
                case 1:
                      system("cls");
                      MenuFilme();             
                      break;
            }
       }
   }
   
  printf("\n\n");
  system("PAUSE");
  return 0;
}

Edited by kuroi
Adicionar tag CODE
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

OI, Jessé. O teu menu é um capítulo a parte, portanto nem falarei dele. Vamos focar em gravação de arquivos.

O parâmetro "w+" especifica leitura e escrita, então não faz sentido utilizá-lo numa operação somente escrita. Além disso, ele substitui o arquivo anterior e eu imagino que tu gostarias de acrescentar informações. E estou partindo das premissas: o caminho "C:\Filmes" é valido, ou seja, existe (já que o "fopen" não cria diretórios) e tu tens permissão para gravar ali.

Tendo em vista a utilização do código (locadora), eu sugiro uma abordagem completamente diferente (conceitualmente): listas (dado estruturado).

O princípio é simples, carregar todo o conteúdo do arquivo (ou parte dele, se for muito grande) para uma lista com alocação dinâmica e vários campos (nome, gênero, ano etc), fazer todas as operações nela (acrescentar ou excluir filmes, organizar em ordem alfabética ou por gênero) e, quando concluir, uma função grava os dados num arquivo substituindo o anterior. Simples, não é?!

Outras dicas: releia o código para não incluir uma mesma biblioteca 3 vezes; "!filme == NULL" <==> "filme != NULL" <==> "filme"; pergunte sobre "switch".

Espero ter ajudado! ;)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...