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

último registro gravado duplicado


asantos38

Pergunta

Boa tarde, galera!

Fiz um pequeno programa de cadastro de pessoas e percebi que quando exibo as pessoas cadastradas o último registro gravado está duplicado.

Estou usando win10 e o compilador é o minGW.

segue o código:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Pessoa{
    char nome[30];
    int idade;
};

void pausa(){
    printf("pressione qualquer tecla para voltar ao menu principal\n");

    scanf("%*c");
}

void limpar_buffer(){
    scanf("%*[^\n]");
    scanf("%*c");
}

void cadastrar(){
    FILE* fp;
    struct Pessoa p;
    char escolha = 's';

    do{
        system("cls");

        printf("Rotina de cadastro\n\n\n");

        printf("Nome: ");

        fgets(p.nome, 30, stdin);

        printf("Idade: ");

        scanf("%d%*c", &p.idade);

        fp = fopen("cadastro.dat", "ab");

        fwrite(&p, sizeof(p), 1, fp);

        fclose(fp);

        system("cls");

        printf("Cadastro realizado com sucesso!\n");

        printf("\n\n\nCadastrar outro?: ");

        escolha = getchar();

        limpar_buffer();

    }while(escolha != 'n' && escolha != 'N');
}

void exibir(){
    FILE* fp;
    struct Pessoa p;
    int total = 0;

    system("cls");

    printf("Relacao de cadastrados\n\n\n");

    fp = fopen("cadastro.dat", "rb");


    while(!feof(fp)){
        fread(&p, sizeof(p), 1, fp);

        total++;

        printf("Nome: %s\n", p.nome);

        printf("Idade: %d\n", p.idade);

        printf("-----------------------------------------\n");
    }

    fclose(fp);

    printf("Numero de cadastrados: %d\n", total);

    pausa();
}

int menu(){
    int m;

    system("cls");

    printf("Menu principal\n\n\n");

    printf("[1] - Cadastrar\n");
    printf("[2] - Relacao cadastrados\n");
    printf("[3] - Sair\n");

    printf("\n\n\n?: ");
    scanf("%d%*c", &m);

    return m;
}

int main(){
    //declaração de variáveis.
    int escolha = 0;

    do{
        escolha = menu();

        switch(escolha){
            case 1:cadastrar();
                    break;

            case 2:exibir();
        }

    }while(escolha != 3);

    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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