When inserting into a vector always overlays the previously entered value

0

In my code when adding a contact (X), and seeing the list of contacts, I have contact X, but when adding another contact (Y), and go to see the list, contact Y replaces X, how can I to add multiple in the vector?

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h> 
/*--------------------------------------ESTRUTURA DA AGENDA------------------------------------------------------*/
 struct Pessoa {
    char nome[100], email [100], rua[100], bairro[100], cidade[100], estado[100], pais[100], numero[4], complemento[10], cep[8], telefone[30], observacao[200];
    int dia, mes, ano;
} Agenda[5]; /* VETOR AGENDA PARA 3 PESSOAS POR QUESTÕES DE SIMPLIFICAÇÃO. OS OUTROS 2 ESPAÇOS SÃO PARA O AUX. */

/*--------------------------------FUNÇÕES (SÃO CHAMADAS PELO MENU)----------------------------------------------*/
void BuscarNome (void);
void BuscarMes (void);
void BuscarMesDia (void);
void InserirContato (void);
void RemoverContato (void);
void AgendaCompleta (void);
int NomeNulo(char *s);

main() {
    int i,j,result, cont=1;
    char escolha;
    /* --------MENU PRINCIPAL DE OPÇÕES----------*/
    menu: 
    printf ("\n");
    printf ("*******************AGENDA PESSOAL*******************\n");
    printf ("*                                                  *\n");
    printf ("*  [1] Buscar contato por nome.                    *\n");
    printf ("*  [2] Buscar contato por mes de aniversario.      *\n");
    printf ("*  [3] Buscar contato por mes e dia de aniversario.*\n");
    printf ("*  [4] Adicionar um contato a agenda.              *\n");
    printf ("*  [5] Remover um contato da agenda.               *\n");
    printf ("*  [6] Mostrar todos os contatos registrados.      *\n");
    printf ("*                                                  *\n");
    printf ("****************************************************\n");

    printf ("Escolha uma opcao: "); scanf("%d", &escolha);

    switch (escolha) {
        case 1 :
            system ("cls");
            BuscarNome();
            goto menu;
            break;

        case 2 :
            system ("cls");
            BuscarMes();
            goto menu;
            break;

        case 3 :
            system ("cls");
            BuscarMesDia();
            goto menu;
            break;

        case 4 :
            system ("cls");
            InserirContato();
            sleep (2);
            system ("cls");
            goto menu;
            break;

        case 5 :
            system ("cls");
            RemoverContato();
            goto menu;
            break;

        case 6 :
            system ("cls");
            AgendaCompleta();


            goto menu;
            break;

        default :
            system ("cls");
            printf ("\n");
            printf ("               Digite uma opcao valida\n");
            sleep (2);
            goto menu;
            break;

    }

    system("pause");
}

void BuscarNome () {
    printf ("Vc buscou um contato pelo nome!");
}

void BuscarMes () {
    printf ("Vc buscou um contato pelo mes de aniversario!");
} 

void BuscarMesDia () {
    printf ("Vc buscou um contato pelo mes e dia de aniversario!");
} 

void InserirContato () {
    int cont=1;
    printf ("Adicionar um contato:\n");
    printf ("Nome: ");
    scanf("%s", &Agenda[cont].nome); fflush(stdin); 
    printf ("Telefone: ");
    gets(Agenda[cont].telefone); fflush(stdin); 
    printf ("Email: ");
    gets(Agenda[cont].email); fflush(stdin); 
    printf ("Aniversario [DIA]: ");
    scanf("%d", &Agenda[cont].dia); fflush(stdin);
    printf ("Aniversario [MES]: ");
    scanf("%d", &Agenda[cont].mes); fflush(stdin); 
    printf ("Aniversario [ANO]: ");
    scanf("%d", &Agenda[cont].ano); fflush(stdin); 
/*  printf ("Endereco: \n");
    printf ("Rua: ");
    gets(Agenda[cont].rua); fflush(stdin); 
    printf ("Bairro: ");
    gets(Agenda[cont].bairro); fflush(stdin); 
    printf ("Cidade: ");
    gets(Agenda[cont].cidade); fflush(stdin); 
    printf ("Estado: ");
    gets(Agenda[cont].estado); fflush(stdin); 
    printf ("Pais: ");
    gets(Agenda[cont].pais); fflush(stdin); 
    printf ("Numero: ");
    gets(Agenda[cont].numero); fflush(stdin);
    printf ("Complemento: ");
    gets(Agenda[cont].complemento); fflush(stdin);
    printf ("Cep: ");
    gets(Agenda[cont].cep); fflush(stdin); */
    printf ("Observacao: ");
    gets(Agenda[cont].observacao); fflush(stdin);
    printf ("Contato inserido na agenda!!");
    cont++;
} 

void RemoverContato () {
    printf ("Vc removeu um contato!");
} 

void AgendaCompleta () {
    int i, opcao;
    contatos:
    printf ("*******************CONTATOS*************************\n");
    printf ("*                                                  *\n");
    printf ("*  [1] Nome, Telefone e Email.                     *\n");
    printf ("*  [2] Todos os dados dos contatos.                *\n"); 
    printf ("*                                                  *\n");
    printf ("****************************************************\n");

    printf ("Escolha uma opcao: "); scanf("%d", &opcao);
    switch (opcao) {
        case 1:
            system ("cls");
            for(i=0;i<5;i++) { 
                if(!NomeNulo(Agenda[i].nome)) { // SO MOSTRA OS CONTATOS Q TIVEREM NOME
                    printf ("Contato[%d]\n", i);
                    printf("Nome: %s\n",Agenda[i].nome);
                    printf("Telefone: %s\n",Agenda[i].telefone);
                    printf("Email: %s\n",Agenda[i].email);
                    printf("\n"); 
                    }
                }
            break;

        case 2: 
            system ("cls");
            for(i=0;i<5;i++) { 
                if(!NomeNulo(Agenda[i].nome)) { // SO MOSTRA OS CONTATOS Q TIVEREM NOME
                    printf ("Contato[%d]\n", i);
                    printf("Nome: %s\n",Agenda[i].nome);
                    printf("Endereco: %s",Agenda[i].rua);
                    printf(", %s",Agenda[i].bairro);
                    printf(", %s",Agenda[i].cidade);
                    printf(", %s",Agenda[i].estado);
                    printf(", %s\n",Agenda[i].pais);
                    printf("Numero: %s\n",Agenda[i].numero);
                    printf("Complemento: %s\n",Agenda[i].complemento);
                    printf("CEP: %s\n",Agenda[i].cep);
                    printf("Telefone: %s\n",Agenda[i].telefone);
                    printf("Email: %s\n",Agenda[i].email);
                    printf("Data de aniversario: %d/%d/%d\n",Agenda[i].dia, Agenda[i].mes, Agenda[i].ano);
                    printf("Observacao: %s\n",Agenda[i].observacao);
                    printf("\n"); 
                }
            }
            break;

            default :
                system ("cls");
                printf ("\n");
                printf ("           Digite uma opcao valida\n");
                sleep (2);
                goto contatos;
                break;  
    }
}

int NomeNulo(char *s){
    return(s[0] == '
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h> 
/*--------------------------------------ESTRUTURA DA AGENDA------------------------------------------------------*/
 struct Pessoa {
    char nome[100], email [100], rua[100], bairro[100], cidade[100], estado[100], pais[100], numero[4], complemento[10], cep[8], telefone[30], observacao[200];
    int dia, mes, ano;
} Agenda[5]; /* VETOR AGENDA PARA 3 PESSOAS POR QUESTÕES DE SIMPLIFICAÇÃO. OS OUTROS 2 ESPAÇOS SÃO PARA O AUX. */

/*--------------------------------FUNÇÕES (SÃO CHAMADAS PELO MENU)----------------------------------------------*/
void BuscarNome (void);
void BuscarMes (void);
void BuscarMesDia (void);
void InserirContato (void);
void RemoverContato (void);
void AgendaCompleta (void);
int NomeNulo(char *s);

main() {
    int i,j,result, cont=1;
    char escolha;
    /* --------MENU PRINCIPAL DE OPÇÕES----------*/
    menu: 
    printf ("\n");
    printf ("*******************AGENDA PESSOAL*******************\n");
    printf ("*                                                  *\n");
    printf ("*  [1] Buscar contato por nome.                    *\n");
    printf ("*  [2] Buscar contato por mes de aniversario.      *\n");
    printf ("*  [3] Buscar contato por mes e dia de aniversario.*\n");
    printf ("*  [4] Adicionar um contato a agenda.              *\n");
    printf ("*  [5] Remover um contato da agenda.               *\n");
    printf ("*  [6] Mostrar todos os contatos registrados.      *\n");
    printf ("*                                                  *\n");
    printf ("****************************************************\n");

    printf ("Escolha uma opcao: "); scanf("%d", &escolha);

    switch (escolha) {
        case 1 :
            system ("cls");
            BuscarNome();
            goto menu;
            break;

        case 2 :
            system ("cls");
            BuscarMes();
            goto menu;
            break;

        case 3 :
            system ("cls");
            BuscarMesDia();
            goto menu;
            break;

        case 4 :
            system ("cls");
            InserirContato();
            sleep (2);
            system ("cls");
            goto menu;
            break;

        case 5 :
            system ("cls");
            RemoverContato();
            goto menu;
            break;

        case 6 :
            system ("cls");
            AgendaCompleta();


            goto menu;
            break;

        default :
            system ("cls");
            printf ("\n");
            printf ("               Digite uma opcao valida\n");
            sleep (2);
            goto menu;
            break;

    }

    system("pause");
}

void BuscarNome () {
    printf ("Vc buscou um contato pelo nome!");
}

void BuscarMes () {
    printf ("Vc buscou um contato pelo mes de aniversario!");
} 

void BuscarMesDia () {
    printf ("Vc buscou um contato pelo mes e dia de aniversario!");
} 

void InserirContato () {
    int cont=1;
    printf ("Adicionar um contato:\n");
    printf ("Nome: ");
    scanf("%s", &Agenda[cont].nome); fflush(stdin); 
    printf ("Telefone: ");
    gets(Agenda[cont].telefone); fflush(stdin); 
    printf ("Email: ");
    gets(Agenda[cont].email); fflush(stdin); 
    printf ("Aniversario [DIA]: ");
    scanf("%d", &Agenda[cont].dia); fflush(stdin);
    printf ("Aniversario [MES]: ");
    scanf("%d", &Agenda[cont].mes); fflush(stdin); 
    printf ("Aniversario [ANO]: ");
    scanf("%d", &Agenda[cont].ano); fflush(stdin); 
/*  printf ("Endereco: \n");
    printf ("Rua: ");
    gets(Agenda[cont].rua); fflush(stdin); 
    printf ("Bairro: ");
    gets(Agenda[cont].bairro); fflush(stdin); 
    printf ("Cidade: ");
    gets(Agenda[cont].cidade); fflush(stdin); 
    printf ("Estado: ");
    gets(Agenda[cont].estado); fflush(stdin); 
    printf ("Pais: ");
    gets(Agenda[cont].pais); fflush(stdin); 
    printf ("Numero: ");
    gets(Agenda[cont].numero); fflush(stdin);
    printf ("Complemento: ");
    gets(Agenda[cont].complemento); fflush(stdin);
    printf ("Cep: ");
    gets(Agenda[cont].cep); fflush(stdin); */
    printf ("Observacao: ");
    gets(Agenda[cont].observacao); fflush(stdin);
    printf ("Contato inserido na agenda!!");
    cont++;
} 

void RemoverContato () {
    printf ("Vc removeu um contato!");
} 

void AgendaCompleta () {
    int i, opcao;
    contatos:
    printf ("*******************CONTATOS*************************\n");
    printf ("*                                                  *\n");
    printf ("*  [1] Nome, Telefone e Email.                     *\n");
    printf ("*  [2] Todos os dados dos contatos.                *\n"); 
    printf ("*                                                  *\n");
    printf ("****************************************************\n");

    printf ("Escolha uma opcao: "); scanf("%d", &opcao);
    switch (opcao) {
        case 1:
            system ("cls");
            for(i=0;i<5;i++) { 
                if(!NomeNulo(Agenda[i].nome)) { // SO MOSTRA OS CONTATOS Q TIVEREM NOME
                    printf ("Contato[%d]\n", i);
                    printf("Nome: %s\n",Agenda[i].nome);
                    printf("Telefone: %s\n",Agenda[i].telefone);
                    printf("Email: %s\n",Agenda[i].email);
                    printf("\n"); 
                    }
                }
            break;

        case 2: 
            system ("cls");
            for(i=0;i<5;i++) { 
                if(!NomeNulo(Agenda[i].nome)) { // SO MOSTRA OS CONTATOS Q TIVEREM NOME
                    printf ("Contato[%d]\n", i);
                    printf("Nome: %s\n",Agenda[i].nome);
                    printf("Endereco: %s",Agenda[i].rua);
                    printf(", %s",Agenda[i].bairro);
                    printf(", %s",Agenda[i].cidade);
                    printf(", %s",Agenda[i].estado);
                    printf(", %s\n",Agenda[i].pais);
                    printf("Numero: %s\n",Agenda[i].numero);
                    printf("Complemento: %s\n",Agenda[i].complemento);
                    printf("CEP: %s\n",Agenda[i].cep);
                    printf("Telefone: %s\n",Agenda[i].telefone);
                    printf("Email: %s\n",Agenda[i].email);
                    printf("Data de aniversario: %d/%d/%d\n",Agenda[i].dia, Agenda[i].mes, Agenda[i].ano);
                    printf("Observacao: %s\n",Agenda[i].observacao);
                    printf("\n"); 
                }
            }
            break;

            default :
                system ("cls");
                printf ("\n");
                printf ("           Digite uma opcao valida\n");
                sleep (2);
                goto contatos;
                break;  
    }
}

int NomeNulo(char *s){
    return(s[0] == '%pre%');
}
'); }
    
asked by anonymous 04.11.2018 / 23:31

2 answers

1

The ideal in such cases is to make a minimal, complete and verifiable example so that we do not have to read all your code, interpret it, debug it, test it, and so on. But roughly the problem is that it is always entering the insertion function and starting the initial position at 1, so it will always be there that it will be inserted, which is adding nothing is worth. And at the end of the function should return the new value to main() . You need to learn about variable scope .

You would need a control that departed from the function main() and the position would be passed as argument in the function call that would have an appropriate parameter to receive it. In fact, the array agenda itself should be created within main() and passed as argument as well. All of this is wrong in real codes, but exercise can be done. You'll still be learning the real wrong way, but at least it will not be wrong even for an exercise.

You have several other errors in this code, including redundancy and you should not use goto , prefer while .

    
05.11.2018 / 00:42
0

The program is inserting the contact in the position cont of the vector, which has the fixed value of 1, so it will always add the register in the same position of the vector. It is necessary to use a repeat loop to increment the cont variable and prevent the record from always being saved in the same position.

    
08.11.2018 / 12:11