Erro quando altera registro de arquivo em Linguagem C

Opa, boa tarde a todos! Bom, vamos ao meu problema xD
Estou fazendo um trabalho de programação na linguagem C para a faculdade, no trabalho, eu tenho que fazer um “sistema” para uma biblioteca com cadastrar, alterar, excluir, pesquisar, etc…
O meu problema eh o seguinte, quando eu cadastro algum livro e altero ele, ele altera normalmente, porem, quando volto a alterar ele pela segunda vez/ou terceira, ele buga o registro, colocando um codigo muito nada a ve (ex: cod 1, altera a segunda/terceira vez, cod 256) e zera todos os dados do registro…
Meu codigo esta logo abaixo, se alguem souber qual o problema, por favor me ajude -

Obrigado ^^

Editado para arrumar o título do assunto

Pelo tipo do seu código, seu programa está em C, não em C++. Sempre que for postar algo nessas linguagens, diga a linguagem certa. C e C++ são duas linguagens bem diferentes, dizer que o código é em C/C++ não ajuda muito.

Obrigado pela dica, vou prestar mais atenção da próxima vez.
Mas… você pode me ajudar de alguma forma, ou tem alguma idéia do que pode ser?

Obrigado

Seu script está sobrecarregando a página, não consigo visualizar seu código (as vezes até trava o navegador).

Dica: Já que é muita coisa, anexe seu código com a opção de anexos do GUJ, e retire o código entre as tags code da página. Isso deve estar espantando muitos usuários que querem ajuda-lo.

[quote=ViniGodoy]Seu script está sobrecarregando a página, não consigo visualizar seu código (as vezes até trava o navegador).

Dica: Já que é muita coisa, anexe seu código com a opção de anexos do GUJ, e retire o código entre as tags code da página. Isso deve estar espantando muitos usuários que querem ajuda-lo.[/quote]

Mais uma vez obrigado pelas dicas :smiley:

Já tentou rodar num depurador?
Olhando o código por cima, não cheguei a ver nenhum problema.

Geralmente isso é causado quando você usa alguma variável que não foi inicializada, ou que foi destruída.

[quote=ViniGodoy]Já tentou rodar num depurador?
Olhando o código por cima, não cheguei a ver nenhum problema.

Geralmente isso é causado quando você usa alguma variável que não foi inicializada, ou que foi destruída.[/quote]

Testei debugando pelo próprio DevC++, porém não tive nenhum resultado satisfatório.
Você me recomenda outra IDE para poder debugar?
Não faço a mínima idéia do que seja, não vejo nenhuma variável sem inicializar ou coisa assim.
Não entendo muito, mas poderia ser algo de buffer?
Acho que também pensei em todas as possibilidades do que pode estar fazendo isso.

Mas muito obrigado por enquanto.

Sim. Use o Visual Studio 2010 Express (é de graça). O DevCpp não presta. Além de muito antigo, com um compilador praticamente obsoleto, ele omite parte das mensagens de erro.
Preste especial atenção nas funções onde você faz cópia de estruturas (quando vc retorna o livro, por exemplo).

Outra opção, se quiser se manter nos compiladores GNU, é o Code::Blocks. Além é portátil, portável e possui bons recursos de depuração.

  1. Vocês só conhecem programação copy & paste, não? Estão começando mal. Tem código repetido demais. Quando há muito código repetido, a probabilidade de corrigir código em um ponto e não corrigir em outro é muito alta. Tirei 12 KB do programa só com uma refatoração bem boboca.

  2. Não corrigi seu programa, mas fiz algumas alterações e notei que ele tem vários problemas. Por favor, dêem uma olhadinha nas coisas que achei de erradas. Uma coisa boçal que tinha nele é uma coisa do tipo

l.anolanc = l.anolanc;

O que vocês estavam pensando que isso iria fazer? Macumba não funciona em C. Não mexi nisso porque nem quis saber o que isso tinha de fazer.

[quote=entanglement]1) Vocês só conhecem programação copy & paste, não? Estão começando mal. Tem código repetido demais. Quando há muito código repetido, a probabilidade de corrigir código em um ponto e não corrigir em outro é muito alta. Tirei 12 KB do programa só com uma refatoração bem boboca.

  1. Não corrigi seu programa, mas fiz algumas alterações e notei que ele tem vários problemas. Por favor, dêem uma olhadinha nas coisas que achei de erradas. Uma coisa boçal que tinha nele é uma coisa do tipo

l.anolanc = l.anolanc;

O que vocês estavam pensando que isso iria fazer? Macumba não funciona em C. Não mexi nisso porque nem quis saber o que isso tinha de fazer. [/quote]

Então cara, você até pode achar estranho, mas se esse programa fosse pra ser feito em JAVA ou COBOL, faríamos de boa.
Estamos aprendendo C na faculdade (FATEC) e é bem básico, apesar de “apredermos” coisas como struct, function, abrir, fechar e salvar algo em arquivo não é nada muito profundo, e, de certa forma, não temos muita base na linguagem para conhecer seus recursos, esse é nosso maior problema, além do erro no programa.
Mas gostamos do que você fez, e nos serviu como incentivo em conhecer mais a linguagem.
Depois acabamos vendo alguns erros nossos, falta de atenção msm e colocamos o arquivo modificado no primeiro post.

Vamos ver certinho o que você nos passou, muito obrigado novamente.

E você faria algo assim em Java?

Então por que fez em C?

Na verdade, o Entanglement tem muita razão.
Também notei a quantidade absurda de repetições, que poderiam ser removidas com a criação de funções simples. E, se você já sabe fazer funções em Java, era obrigação sua faze-las em C também. Princípios de qualidade de código são universais. :wink:

[quote=ViniGodoy]E você faria algo assim em Java?

Então por que fez em C?

Na verdade, o Entanglement tem muita razão.
Também notei a quantidade absurda de repetições, que poderiam ser removidas com a criação de funções simples. E, se você já sabe fazer funções em Java, era obrigação sua faze-las em C também. Princípios de qualidade de código são universais. ;)[/quote]

na verdade não faríamos algo do tipo, mas o que fizemos foi falta de atenção mesmo.
O problema é que este é um programa que tem que ser especificamente em C, então, complica. Também
entendemos que o que fazemos em Java ou outra linguagem devemos aplicar os mesmos conceitos em C,
mas o curto tempo que tivemos para fazer, nos levou a fazer assim, no momento foi a unica solução, agora
estamos tentando melhorá-lo, buscando o auxilio do pessoal do forum que possui um conhecimento mais vasto
do que qualquer um de nós ou nós 3 juntos.

Só estamos buscando uma forma de nos aprimorarmos, erramos sim é claro,
e estamos tentando corrigir esses erros e aprendendo com eles, assim, como
qualquer pessoa que começa a fazer alguma coisa, de inicio tende a cometer
certos erros.

Mas obrigado a todos por enquanto, agradecemos toda ajuda e dicas

Calma, ninguém está julgando vocês.

Mas as vezes é melhor começar “fazendo faxina” antes de tentar só resolver o erro.
Algumas vezes só isso já faz com que o erro se resolva sozinho, ou apareça mais facilmente.