Ir ao conteúdo
  • Cadastre-se

C Exercicio Envolvendo Alocação Dinâmica


Danielsf850

Posts recomendados

Boa Tarde Alguem poderia me ajudar com a resolução deste exercicio.

 

 Criar uma estrutura , contendo nome, data de nascimento e CPF. Crie uma variável que é um ponteiro para esta estrutura (no programa principal). Depois crie uma função que receba este ponteiro e preencha os dados da estrutura e também uma uma função que receba este ponteiro e imprima os dados da estrutura. Finalmente, faça a chamada a esta função na função principal.

 

Posteriormente,

 

 Idem a questão acima, mas construa as funções usando referências (&).

 

//Codigo dando erro

 

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

typedef struct{
    char nome[60];
    char cpf[20];
    char nascimento[15];
}TipoCadastro;

int i;

TipoCadastro EfetuaCadastro(TipoCadastro *Cad, int tamanho){


    Cad=(TipoCadastro*)malloc(sizeof(TipoCadastro)*tamanho);

    for(i=0;i<tamanho;i++){

        printf("\nInforme o Nome:");
        fgets(Cad.nome,60,stdin);
        setbuf(stdin,NULL);

        printf("\nInforme o CPF no formato NNN.NNN.NNN-NN:\n");
        fgets(Cad.cpf,20,stdin);
        setbuf(stdin,NULL);

        printf("\nInforme a Data De Nascimento no formato DD/MM/AAAA:\n");
        fgets(Cad.nascimento,20,stdin);
        setbuf(stdin,NULL);
    }
return *Cad;
}

void ExibeCadstro(TipoCadastro *Cad, int tamanho){
    int i;

    for(i=0;i<tamanho;i++){

        printf("\nInforme o Nome:%s",Cad.nome);
        printf("\nInforme o CPF no formato NNN.NNN.NNN-NN:%s\n",Cad.cpf);
        printf("\nInforme a Data De Nascimento no formato DD/MM/AAAA:%s\n",Cad.nascimento);
    }
}

int main(){
    setlocale(LC_ALL,"portuguese");

    int n;

    typedef TipoCadastro *Cadastro;

    printf("\nInforme quanto Cadastros Deseja Realizar:\n");
    scanf("%d",&n);

    Cadastro=EfetuaCadastro(&Cadastro,n);//ERRO

    ExibeCadastro(Cadastro,n);/ERRO

    return 0;
}

Link para o comentário
Compartilhar em outros sites

//Codigo dando erro ?? Qual erro? Ajudar muito quando você posta o erro...no caso o output do debug/compilador :s

 

Vendo seu código, percebi os seguintes problemas:

 

Cadastro=EfetuaCadastro(&Cadastro,n);//ERRO

 

Sabendo que Cadastro é um ponteiro, então ele não possui um endereço próprio, ele apenas aponta para outro endereço, portanto não use & para um objeto que foi  declarado como ponteiro.

R: Cadastro=EfetuaCadastro(Cadastro,n);

 

Já na função EfetuaCadastro, veja que você declarou uma função que retorna uma estrutura inteira, sem ser ponteiro.

TipoCadastro EfetuaCadastro(...){

return (TipoCadastro);

}

 

é diferente de:

//Use esse

TipoCadastro *EfetuaCadastro(...){

return (TipoCadastro*);

}

 

-----

Na função ExibeCadastro:

Quando usamos um ponteiro, temos um problema, não podemos acessar seu endereço próprio, por que como dito, ele não possui, ele apenas aponta para um endereço já alocado, e isso implica em usar "->" em vez de ".", como:

 

TipoCadastro blabla;

TipoCadastro *Cad = &blabla;

 

Cad.nome; (incorreto)

Cad->nome; (correto)

 

---

Espero ter ajudado.

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...