Função para Preencher um Contato
Parte da seção Lógica e Fluxo do Journey de C da Coddy. Lição 52 de 63.
Desafio
FácilCom base na sua função de criação de contatos da lição anterior, crie uma função que preencha um contato com dados fornecidos pelo usuário. Seu programa deve:
- Usar a mesma definição da struct
Contactdas lições anteriores, com os membros:- Um array de caracteres
namecom tamanho 50 - Um array de caracteres
phonecom tamanho 20 - Um array de caracteres
emailcom tamanho 40 - Um inteiro
age
- Um array de caracteres
- Usar a mesma função
createContactda lição anterior, que:- Aloca memória dinamicamente para uma struct
Contact - Inicializa todos os membros com valores padrão
- Retorna um ponteiro para o contato
- Aloca memória dinamicamente para uma struct
- Escrever uma função chamada
populateContactque:- Recebe um ponteiro para uma struct
Contactcomo parâmetro - Não retorna nada (void)
- Solicita uma entrada ao usuário e lê os dados a seguir nesta ordem exata:
- Imprime
Enter name:e lê uma string no campo name usandoscanf("%s", contactPtr->name) - Imprime
Enter phone:e lê uma string no campo phone usandoscanf("%s", contactPtr->phone) - Imprime
Enter email:e lê uma string no campo email usandoscanf("%s", contactPtr->email) - Imprime
Enter age:e lê um inteiro no campo age usandoscanf("%d", &contactPtr->age)
- Imprime
- Após ler todos os dados, valida os dados:
- Se a idade for menor que 0 ou maior que 120, imprime
Invalid age entered - Se o comprimento do número de telefone for menor que 10 caracteres (use
strlen()), imprimeInvalid phone number - Se todas as validações forem aprovadas, imprime
Contact populated successfully
- Se a idade for menor que 0 ou maior que 120, imprime
- Recebe um ponteiro para uma struct
- Na função main:
- Crie um contato usando a função
createContact - Verifique se a criação do contato foi bem-sucedida
- Chame a função
populateContactpara preencher os dados do contato - Após preencher o contato, exiba as informações usando o operador de seta neste formato exato:
Contact Information:Name: [name]Phone: [phone]Email: [email]Age: [age]
- Libere a memória alocada dinamicamente
- Imprima
Contact deleted successfully
- Crie um contato usando a função
Este desafio demonstra como criar funções que modificam dados de uma struct por meio de ponteiros. A função populateContact recebe um ponteiro para o contato e usa o operador de seta para modificar diretamente os membros da struct original. Você praticará o tratamento de entradas do usuário, a validação de dados e o trabalho com structs alocadas dinamicamente por meio de parâmetros de funções.
Experimente você mesmo
#include <stdio.h>
#include <stdlib.h>
struct Contact {
char name[50];
char phone[20];
char email[40];
int age;
};
struct Contact* createContact() {
struct Contact* contactPtr = (struct Contact*)malloc(sizeof(struct Contact));
if (contactPtr == NULL) {
printf("Memory allocation failed\n");
return NULL;
}
printf("Contact created successfully\n");
contactPtr->name[0] = '\0';
contactPtr->phone[0] = '\0';
contactPtr->email[0] = '\0';
contactPtr->age = 0;
return contactPtr;
}
int main() {
struct Contact* newContact;
newContact = createContact();
if (newContact == NULL) {
printf("Failed to create contact\n");
return 1;
}
printf("Contact initialized with default values\n");
printf("Default Contact Values:\n");
printf("Name: %s\n", newContact->name);
printf("Phone: %s\n", newContact->phone);
printf("Email: %s\n", newContact->email);
printf("Age: %d\n", newContact->age);
free(newContact);
printf("Memory freed successfully\n");
return 0;
}Todas as lições de Lógica e Fluxo
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um ContatoPratique por conta própria: Compilador de C online