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

Esta dando errado


Thiago lablonsk

Pergunta

4 respostass a esta questão

Posts Recomendados

  • 0

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)

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

<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

Link para o comentário
Compartilhar em outros sites

  • 0

<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.

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,2k
    • Posts
      652k
×
×
  • Criar Novo...