Ir ao conteúdo
  • Cadastre-se

percautus

Membro Pleno
  • Posts

    57
  • Cadastrado em

  • Última visita

posts postados por percautus

  1. Antes de inserir o registro, teste se o codigo já existe.

    Vai ter que fazer uma função que varre o arquivo inteiro, e retorna a existência daquele código.

    Existindo, você pode dar a opção para alterar o registro ou informar outro código para inclusão.

    É um procedimento normal em aplicações de cadastro...

  2. Vamos lá:

    1) Primeiro seu arquivo deve estar aberto para leitura e gravação

    FILE * meuarq;

    meuarq = fopen("jogos.dat", "r+b");

    2) Chamar a função informando o código do registro a ser alterado:

    alterar(meuarq, 10); // por exemplo, alterar o registro de codigo 10

    3) Modifiquei (em vermelho) o seu código para:


    void alterar(FILE *pont, int codigo)
    {
    struct jogo cad;
    int sucesso=0;
    [COLOR="Red"]

    int posicao = 0; // inicio do arquivo

    // usar fseek para ir ao inicio do arquivo pois
    // voce pode estar adiante do registro que quer alterar

    fseek(pont, posicao, SEEK_SET);

    [/COLOR]
    do {
    if (fread(&cad,sizeof(struct jogo),1,pont) == 0)
    break;
    if (cad.codigo == codigo)
    {
    system("cls");
    printf("<<<<<Registro Antigo>>>>>\n\n");
    printf("Codigo............: %d\n",cad.codigo);
    printf("Jogo..............: %s\n",cad.nome_jogo);
    printf("Plataforma........: %s\n",cad.plataforma);
    printf("Desenvolvedor'a'..: %s\n",cad.desenvolvedor_a);
    printf("Ano...............: %d\n\n",cad.ano);
    printf("<<<<<Digite o Registro novo>>>>\n\n");
    printf("Código..........: ");
    scanf("%d", &cad.codigo);
    fflush(stdin);
    printf("Nome do Jogo....: ");
    gets(cad.nome_jogo);
    printf("Plataforma......: ");
    gets(cad.plataforma);
    printf("Desenvolvedor'a': ");
    gets(cad.desenvolvedor_a);
    fflush(stdin);
    printf("Ano.............: ");
    scanf("%d", &cad.ano);
    fflush(stdin);
    cad.deletado=0;
    [COLOR="red"]
    // quando você le o arquivo o ponteiro se desloca.
    // é necessario voltar para a posicao anterior a
    // da leitura que é onde o registro começa

    fseek(pont, posicao, SEEK_SET);

    // agora sim, podemos gravar
    // e é melhor o sucesso estar condicionado a
    // correta gravacao do registro (abaixo)
    [/COLOR]
    sucesso= fwrite(&cad,sizeof(struct jogo),1,pont) == sizeof(struct jogo);
    break;
    }
    [COLOR="Red"]
    // ajustar posicao em relação ao inicio do arquivo
    posicao = posicao + sizeof(struct jogo);
    [/COLOR]
    } while(1);
    if (!sucesso)
    printf("Jogo não encontrado no arquivo\n");
    system("pause");
    }

    Uma observação:

    1) Não acho legal permitir trocar de código.

    Acho que é isto. Vamos ver se funciona... :)

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!