Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Danielsf850

C Exercicio Envolvendo Alocação Dinâmica

Recommended Posts

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;
}

Editado por Danielsf850

Compartilhar este post


Link para o post
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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×