Informática, perguntado por Jujubay, 1 ano atrás

Linguagem em C.
* Crie uma struct pessoa que contenha id, nome e cpf. Crie uma função que recebe os dados da pessoa e retorne a mesma criada, lembrando que dados como nome deve ter o seu tamanho alocado dinamicamente. No main faça o teste criando duas pessoas e imprima para verificar se está funcionando corretamente.

Soluções para a tarefa

Respondido por Usuário anônimo
3
Boa noite!


/* Crie uma struct pessoa que contenha: id, nome e cpf.
   Crie uma função que recebe os dados da pessoa e retorne a mesma criada,   lembrando que dados como nome deve ter o seu tamanho alocado dinamicamente.   No main faça o teste criando duas pessoas e   imprima para verificar se está funcionando corretamente.*/

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

struct pessoa {
  int id;
  char* nome;
  char cpf[12];
};

struct pessoa * dados_pessoa(int id, char nome[], char cpf[]);

int main(void) {
  int id;
  char nome[50];
  char cpf[12];
  struct pessoa *p1;
  struct pessoa *p2;

  /* Primeira pessoa */
    printf("Dados da primeira pessoa:\n");
  printf("Entre com a id da pessoa: ");
  scanf("%d", &id);

    printf("Entre com o nome da pessoa: ");
  scanf(" %s", nome);

  printf("Entre com o CPF (sem pontos nem traço): ");
  scanf(" %s", cpf);

  /* Criando a variável p1 */
  p1 = dados_pessoa(id, nome, cpf); 

   /* Segunda pessoa */
  printf("Dados da segunda pessoa:\n");
  printf("Entre com a id da pessoa: ");
  scanf("%d", &id);

  printf("Entre com o nome da pessoa: ");
  scanf(" %s", nome);

  printf("Entre com o CPF (sem pontos nem traço): ");
  scanf(" %s", cpf);

  /* Criando a variável p2 */
  p2 = dados_pessoa(id, nome, cpf);

    /* Testando */
  printf("Primeira pessoa: id: %d, Nome: %s, CPF: %s\n", p1->id, p1->nome, p1->cpf);  printf("Segunda pessoa: id: %d, Nome: %s, CPF: %s\n", p2->id, p2->nome, p2->cpf);   

free(p1->nome);  free(p1);
  free(p2->nome);  free(p2);

  return 0;
  }

struct pessoa * dados_pessoa(int id, char nome[], char cpf[]) {
  struct pessoa * p;
    p = (struct pessoa *)malloc(sizeof(struct pessoa));
  p->nome = (char *)malloc(sizeof(char)*strlen(nome)+1);
  p->id = id;
  strcpy(p->nome, nome);
  strcpy(p->cpf, cpf);
    return p;
}

Solução em https://repl.it/NuzX/16

Espero ter ajudado!

bokomoko: Muito bom ! Parabens, belo código e parabens pela manha que resolveu o lance da alocação dinãmica do "nome"
Usuário anônimo: Pena que aqui o código ficou 'feio'. Vou dar uma arruamda
Usuário anônimo: Melhorou um pouco :)
bokomoko: conflito de cr vs cr/lf
Usuário anônimo: É... vou procurar 'converter' antes de colar :)
bokomoko: quando achar ... me dá a dica. toda vez que colo dá bagunça na identacao
Usuário anônimo: Combinado!
Perguntas interessantes