Ir para conteúdo
Fórum Script Brasil
  • 0

Problema ao gravar em arquivo.


Jessé Augusto

Pergunta

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;
}

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...