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 typeendereco
and at no time do you allocate area for such a structure and make the pointer point to it.– anonimo