Criar struct com ponteiro

3 respostas
cprogramação
T
Olá pessoal, tudo bem?

Estou querendo criar uma lista vazia utilizando ponteiros em Linguagem C, mas aparece erro, alguém conseguiria me ajudar?

#include <stdio.h>

#include <stdlib.h>

typedef struct{

char nome[30], ender[50];

int dia, mes, ano;

}PESSOA;
typedef struct{

PESSOA *pPessoa;

//PESSOA *pPessoa;

int qtdePessoas;

};
void criarListaVazia(LISTAPESSOA *listaP){

listaP  pPessoa = (Pessoa <em>)malloc(10</em>sizeof(PESSOA));

listaP  qtdePessoas = 0;

}

int main()
{

return 0;

}
Aparece mensagem de erro:
linha 14: error: unknown type name ‘LISTAPESSOA’

3 Respostas

staroski

Você não criou nenhum struct chamado LISTAPESSOA.

T

Ok, consegui criar.

T
Eu fiz como, ficará a passagem de Parâmetro?

#include <stdio.h>

#include <stdlib.h>

typedef struct{

char nome[30], ender[50];

int dia, mes, ano;

}PESSOA;
typedef struct{

PESSOA *pPessoa;

int qtdePessoas;

}LISTAPESSOA;
void menu(){

printf(=================================\n”);

printf(\tCADASTRO DE PESSOAS\n”);

printf(=================================\n”);

printf([ 1 ] - Inserir registro: );

printf(\n[ 2 ] - Exibir Lista);

printf(\n[ 3 ] - Buscar registro:);

printf(\n[ 4 ] - Eliminar registro);

printf(=================================\n”);

}
void criarListaVazia(LISTAPESSOA *listaP){

listaP  pPessoa = (PESSOA <em>)malloc(10</em>sizeof(PESSOA));

listaP  qtdePessoas = 0;

}
void inserirRegistro(PESSOA pessoa, LISTAPESSOA *listaP, int pos){

int i;

if(listaP ->qtdePessoas == 10){

return -1; //indicativo de lista cheia

}

if(pos > listaP  qtdePessoas){

return -2;

}

for(i = listaP->qtdePessoas+i;i>=pos;i){

memcpy((listaP->pPessoa+i),(listaP->qtdePessoas+i-1),sizeof(PESSOA));

memcpy((listaP->pPessoa+pos),&pessoa,sizeof(PESSOA));

(listaP->qtdePessoas)++;

}

}
int removerRegistro(LISTAPESSOA *listaP, int pos){

int i;

if(listaP->qtdePessoas ==0){

return -1;

}

if(pos >= listaP->qtdePessoas){

return -2;

}

for(i = pos;iqtdePessoas-1;i++){

memcpy((listaP->pPessoa+i),(listaP->pPessoa+i+1),sizeof(PESSOA));

(listaP->qtdePessoas);

}

}
int buscarRegistro(char *nome, LISTAPESSOA listaP, PESSOA *pessoa){

int i = 0;

if(listaP.qtdePessoas == 0){

return -1; // indicativo de lista vazia

}

for(i = 0; i < listaP.qtdePessoas;i++){

if(!strcmp(nome,(listaP.pPessoa+i)->nome)){

pessoa = (listaP.pPessoa+i);

return i;

}

}

return -2; // indicativo de registro não encontrado

}
int main()

{

PESSOA pessoa;

PESSOA* pPessoa = &pessoa;
int opcao = 0;
char procuraNome[30];

while(opcao != 5){
    menu();
    scanf("%d", &opcao);
    int i = 0;
    switch(opcao){
        case 1:
            for(i = 0; i < 10; i++){
                printf("Informe o nome: ");
                scanf("%s", &pessoa.nome);
                printf("Informe o endereco: ");
                scanf("%s", &pessoa.ender);
                printf("Dia de nascimento: ");
                scanf("%d",&pessoa.dia);
                printf("Mes de nascimento: ");
                scanf("%d",&pessoa.mes);
                printf("Ano de nascimento: ");
                scanf("%d",&pessoa.ano);
            }
        inserirRegistro(pessoa, pessoa, i);
        //PESSOA pessoa, LISTAPESSOA *listaP, int pos
        break;
        case 2:

        break;
        case 3:
            printf("Informe o nome: ");
            scanf("%s",&procuraNome);
            //buscarRegistro(procuraNome, LISTAPESSOA listaP, PESSOA *pessoa);
        break;

    }
}

/*strcpy(pessoa.nome,"Joao");
strcpy(pessoa.ender, "Rua Absalao, Jaco e Jacu, 2999");
pessoa.dia = 5;
pessoa.mes = 11;
pessoa.ano = 1975;
printf("Nome: %s\tEndereco: %s\t - Data de Nascimento: %d / %d / %d ", pessoa.nome, pessoa.ender, pessoa.dia, pessoa.mes, pessoa.ano);*/

return 0;

}

Criado 27 de dezembro de 2022
Ultima resposta 30 de dez. de 2022
Respostas 3
Participantes 2