Thiago lablonsk Postado Setembro 3, 2014 Denunciar Share Postado Setembro 3, 2014 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Sandro2011 Postado Setembro 3, 2014 Denunciar Share Postado Setembro 3, 2014 Saudações, Não entendo de C, mas dei uma olhadinha e esse seu problema pode ocorrer neste trecho do código: arquivo= fopen("clinica.txt","ab");if(arquivo==NULL){arquivo=fopen("clinica.txt","wb+");grav->codPaciente=1;} Precisa disto realmente? porque pelo que você disse, não é para apagar o anterior e simplesmente gravar na sequencia, então: arquivo= fopen("clinica.txt","ab"); já bastaria, pois abre um arquivo no modo 'append', (cria um novo se não existe e se já existe grava no final deste) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ScreenBlack Postado Setembro 3, 2014 Denunciar Share Postado Setembro 3, 2014 Não entendi se você está querendo programar em C ou C++.Coisas do C++:#include <iostream> e using namespace std; // Você nem usou as chamadas do std No mais, seu código está inteiro em C.Partirei do princípio que seja C. :P1) Remova as linhas que comentei acima.2) Inclua a biblioteca "libstd.h" (apesar de muitos compiladores sempre a adicionarem, mas é bom deixar explícito).3.0) Uso do fread() e fwrite(), devem receber o tamanho da estrutura que será armazenada e não da variável (que retornará o tamanho de um ponteiro).3.1) A variável grav já é um ponteiro por sí só e utilizando &, estará passando o ponteiro para o ponteiro (ou seja, a referência para a variável e não para o conteúdo dela).Corrija para:fwrite(grav,sizeof(struct paciente), 1, arquivo); e fread(grav, sizeof(struct paciente), 1, arquivo); 4) Não entendi de onde você quer buscar o código do paciente. Seria o incremente do último código inserido no arquivo?Se o código do paciente for incremental, partindo de 1, você pode fazer a contagem pela quantidade de pacientes contidos no arquivo, ao invés de buscar a partir do código do último inserido.Acredito que ajustando o código a partir das dicas acima, o seu código vai ficar mais fácil de ser trabalhado (e debugado).Att. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thiago lablonsk Postado Setembro 3, 2014 Autor Denunciar Share Postado Setembro 3, 2014 <script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script> Saudações, Não entendo de C, mas dei uma olhadinha e esse seu problema pode ocorrer neste trecho do código: arquivo= fopen("clinica.txt","ab");if(arquivo==NULL){arquivo=fopen("clinica.txt","wb+");grav->codPaciente=1;} Precisa disto realmente? porque pelo que você disse, não é para apagar o anterior e simplesmente gravar na sequencia, então: arquivo= fopen("clinica.txt","ab"); já bastaria, pois abre um arquivo no modo 'append', (cria um novo se não existe e se já existe grava no final deste) Na verdade se o arquivo não for criado ele vai gerar 1 arquivo, é apenas um teste e sim o A faz eu acabei descobrindo, Mas,,,, problema que ao executar novamente ele apaga o anterior e grava por cima e ainda cria outro igual Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Thiago lablonsk Postado Setembro 3, 2014 Autor Denunciar Share Postado Setembro 3, 2014 <script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script> Não entendi se você está querendo programar em C ou C++. Coisas do C++: #include <iostream> e using namespace std; // Você nem usou as chamadas do std No mais, seu código está inteiro em C. Partirei do princípio que seja C. :P 1) Remova as linhas que comentei acima. 2) Inclua a biblioteca "libstd.h" (apesar de muitos compiladores sempre a adicionarem, mas é bom deixar explícito). 3.0) Uso do fread() e fwrite(), devem receber o tamanho da estrutura que será armazenada e não da variável (que retornará o tamanho de um ponteiro). 3.1) A variável grav já é um ponteiro por sí só e utilizando &, estará passando o ponteiro para o ponteiro (ou seja, a referência para a variável e não para o conteúdo dela). Corrija para: fwrite(grav,sizeof(struct paciente), 1, arquivo); e fread(grav, sizeof(struct paciente), 1, arquivo); 4) Não entendi de onde você quer buscar o código do paciente. Seria o incremente do último código inserido no arquivo? Se o código do paciente for incremental, partindo de 1, você pode fazer a contagem pela quantidade de pacientes contidos no arquivo, ao invés de buscar a partir do código do último inserido. Acredito que ajustando o código a partir das dicas acima, o seu código vai ficar mais fácil de ser trabalhado (e debugado). Att. Obrigado, vou estudar uma matéria aqui e daqui a pouco vou tentar a dica que você deu foi muito útil e sim eu queria pegar o código já inserido no arquivo e contar a partir dele como faço? e a parte do & não consegui entender (parte da explicação 3.1 eu queria um exemplo para eu entender 100%) Daqui a pouco testo obrigado mesmos... :) :) using namespace std; // Você nem usou as chamadas do std Codeblocks kkkk ele já inicia assim. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Thiago lablonsk
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
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.