Jessé Augusto Posted July 2, 2011 Report Share Posted July 2, 2011 (edited) 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 July 3, 2011 by kuroi Adicionar tag CODE Quote Link to comment Share on other sites More sharing options...
0 FJordan Posted July 3, 2011 Report Share Posted July 3, 2011 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! ;) Quote Link to comment Share on other sites More sharing options...
0 Jessé Augusto Posted July 4, 2011 Author Report Share Posted July 4, 2011 Obrigado pela atenção amigo. Quote Link to comment Share on other sites More sharing options...
Question
Jessé Augusto
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.
Edited by kuroi
Adicionar tag CODE
Link to comment
Share on other sites
2 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.