How to correct fgets() that for the program

Asked

Viewed 30 times

0

My code has two structs. One is inside the other. when I fill out the registration it gets the people[qtdPeople]. name however when it will receive people[qtdPeople]. home->street it to. I wonder what mistake I’m making.

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

typedef struct endereco
{
    char rua[20];
    char bairro[20];
    char cidade[20];
    char estado[20];
    long int cep;
}endereco;

typedef struct cadastro
{
    char nome[30];
    endereco * casa;
    double salario;
    char id[10];
    char cpf[15];
    char estado_civil[20];
    long int telefone;
    int idade;
    char sexo[10];
}cadastro;

void preenche_pessoa (cadastro * pessoas,int qtdPessoas);
//void menu(cadastro *pessoas, int *qtdPessoas);
//void AdicionaPessoa(cadastro * pessoas, cadastro p, int qtdPessoas);
void mostrar_pessoa(cadastro * pessoas, int qtdPessoas, int z);
void busca_masc(cadastro * pessoas, int qtdPessoas);
void busca_sal(cadastro * pessoas, int qtdPessoas);
void busca_id(cadastro * pessoas, int qtdPessoas);

void Opcoes()
{
    printf("\n 1 - Incluir Pessoa ");
    printf("\n 2 - Encontrar mais velho");
    printf("\n 3 - Encontrar Pessoas do sexo masculino");
    printf("\n 4 - Encontrar pessoas com salario maior que 1000");
    printf("\n 5 - Encontrar por identidade");
    printf("\n 6 - sair\n");   
}

int main()
{  
    cadastro pessoas[5];
    //cadastro p;
    int opcao, qtdPessoas = 0;
    do
    {
        Opcoes();
        scanf("%d", &opcao); 
        if (opcao == 1)
        {
            preenche_pessoa(pessoas,qtdPessoas);
            qtdPessoas++;  
        }
        if (opcao == 2)
        {
            
        }
        if (opcao == 3)
        {
            busca_masc(pessoas, qtdPessoas);
        }
        if (opcao == 4)
        {
            busca_sal(pessoas, qtdPessoas);
        }
        if (opcao == 5)
        {
            busca_id(pessoas, qtdPessoas);
        }
        if(opcao==9)
        {
            for(int i=0;i<=qtdPessoas;i++){
                mostrar_pessoa(pessoas,qtdPessoas,i);
            }
        }
    } while (opcao != 6);
    return 0;
}

void preenche_pessoa (cadastro * pessoas, int qtdPessoas)
{

    printf("\nDigite o nome da pessoa: ");
    fflush(stdin);
    fgets(pessoas[qtdPessoas].nome,30,stdin);
    pessoas[qtdPessoas].nome[strlen(pessoas[qtdPessoas].nome)-1] = '\0';
    printf("\nDigite o endereco da pessoa: ");
    printf("\nRua: ");
    fflush(stdin);
    fgets(pessoas[qtdPessoas].casa->rua,20,stdin);
    pessoas[qtdPessoas].casa->rua[strlen(pessoas[qtdPessoas].casa->rua)-1] = '\0';
    printf("\nBairro: ");
    fflush(stdin);
    fgets(pessoas[qtdPessoas].casa->bairro,20,stdin);
    pessoas[qtdPessoas].casa->bairro[strlen(pessoas[qtdPessoas].casa->bairro)-1] = '\0';
    printf("\nCidade: ");
    fflush(stdin);
    fgets(pessoas[qtdPessoas].casa->cidade,20,stdin);
    pessoas[qtdPessoas].casa->cidade[strlen(pessoas[qtdPessoas].casa->cidade)-1] = '\0';
    printf("\nEstado: ");
    fflush(stdin);
    fgets(pessoas[qtdPessoas].casa->estado,20,stdin);
    pessoas[qtdPessoas].casa->estado[strlen(pessoas[qtdPessoas].casa->estado)-1] = '\0';
    printf("\nCep: ");
    scanf("%ld",&pessoas[qtdPessoas].casa->cep);
    printf("\nDigite o salario da pessoa: ");
    scanf("%lf",&pessoas[qtdPessoas].salario); 
    printf("\nDigite a id da pessoa: ");
    fflush(stdin);
    fgets(pessoas[qtdPessoas].id,10,stdin);
    pessoas[qtdPessoas].id[strlen(pessoas[qtdPessoas].id)-1] = '\0';
    printf("\nDigite o cpf da pessoa: ");
    fflush(stdin);
    fgets(pessoas[qtdPessoas].cpf,15,stdin);
    pessoas[qtdPessoas].cpf[strlen(pessoas[qtdPessoas].cpf)-1] = '\0';
    printf("\nDigite o estado civil da pessoa: ");
    fflush(stdin);
    fgets(pessoas[qtdPessoas].estado_civil,20,stdin);
    pessoas[qtdPessoas].estado_civil[strlen(pessoas[qtdPessoas].estado_civil)-1] = '\0';
    printf("\nDigite o telefone da pessoa: ");
    scanf("%ld",&pessoas[qtdPessoas].telefone);
    printf("\nDigite a idade da pessoa: ");
    scanf("%d",&pessoas[qtdPessoas].idade); 
    printf("\nDigite o sexo da pessoa(masc/fem): ");
    fflush(stdin);
    fgets(pessoas[qtdPessoas].sexo,10,stdin);
    pessoas[qtdPessoas].sexo[strlen(pessoas[qtdPessoas].sexo)-1] = '\0';
}
  • Note that casa is a pointer to a structure of the type endereco and at no time do you allocate area for such a structure and make the pointer point to it.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.