Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

lulamen

[Resolvido] Update um menu ficheiro

Mensagens Recomendadas

lulamen

Boa tarde,

Tenho um programa cujo menu é relativamente simples e que faz algumas funcionalidades tais como isto:

1-Listar Pessoas

2-Adicionar Pessoas

3-Eliminar Pessoas

Estas pessoas a que me refiro estão guardadas num ficheiro binário com a ajuda de uma estrutura

Quando eu adiciono pessoas ele pede-me a nome de cada pessoa e a idade e guarda num ficheiro binário mas depois escolho a opção 1 e ele não mostra nada. Só depois de fechar a command window e voltar a compilar é que ele da a lista de pessoas. O mesmo acontece com eliminar pessoas... Eu elimino e depois quero ver a lista e ele nao mostra a lista atualizada. Mostra apenas depois de compilar novamente.

Alguem me pode ajudar?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

tirando uma péssmia gestão do buffer de leitura, o código parece fazer o pretendido, ao contrário do que é dito no primeiro post.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lulamen

Primeiramente, ja consegui detetar o erro no que toca ao listar pessoas logo depois de as adicionar. O Erro estava num close(f) na funcao enviar_informação. E erro estava numa falta de uma letra "f" ou seja, fclose(f). Agora, no que toca à eliminação, o programa elimina correctamente mas depois nao elimina o ficheiro "jogadores.bin" e faz o rename do ficheiro "temp.bin". Apenas o faz se eu ao eliminar o id de uma pessoa e fechar o programa e voltar a compilar ele, aí sim, faz o processo corretamente

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

primeiro altera as segunites linhas :

#include <errno.h>
#include <string.h>

// ...
       if (remove(fich_pessoas) != 0) {
           printf("erro ao eliminar o ficheiro %s : %s\n", fich_pessoas, strerror(errno));
       }

       if (rename("temp.bin","jogadores.bin") != 0) {
           printf("erro a copiar o ficheiro 'temp.bin' para 'jogadores.bin' : %s\n", strerror(errno));
       }
// ...

depois, o erro está na falta de fecho do ficheiro num momento específico

toma atenção se todas as vezes que abres o ficheiro o fechas (eu sei que não, por isso não respondas que fechas ...)


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

depois, o erro está na falta de fecho do ficheiro num momento específico

toma atenção se todas as vezes que abres o ficheiro o fechas (eu sei que não, por isso não respondas que fechas ...)


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lulamen

Eu ja entendi onde esta o erro. Ele esta na funcao listar_pessoas porque se eu pedir para listar as pessoas e depois posteriormente eliminar alguma ele n me deixa pois tenho o ficheiro aberto da listagem. Mas nao consigo encontrar a solução..

Já consegui ! faltava um fclose(f) dentro do else na funcao listar_pessoas

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.