Função para Preencher um Contato
Parte da seção Logic & Flow 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 a entrada do usuário. Seu programa deve:
- Usar a mesma definição de 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 seu parâmetro - Não retorna nada (void)
- Solicita a entrada do usuário e lê os seguintes dados nesta ordem exata:
- Imprime
Enter name:e lê uma string para o campo name usandoscanf("%s", contactPtr->name) - Imprime
Enter phone:e lê uma string para o campo phone usandoscanf("%s", contactPtr->phone) - Imprime
Enter email:e lê uma string para o campo email usandoscanf("%s", contactPtr->email) - Imprime
Enter age:e lê um inteiro para o campo age usandoscanf("%d", &contactPtr->age)
- Imprime
- Após ler todas as entradas, 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 passarem, 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:
- Cria um contato usando a função
createContact - Verifica se a criação do contato foi bem-sucedida
- Chama a função
populateContactpara preencher os dados do contato - Após o preenchimento, exibe as informações do contato usando o operador de seta neste formato exato:
Contact Information:Name: [name]Phone: [phone]Email: [email]Age: [age]
- Libera a memória alocada dinamicamente
- Imprime
Contact deleted successfully
- Cria um contato usando a função
Este desafio demonstra como criar funções que modificam dados de structs através 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á a manipulação de entrada do usuário, validação de dados e o trabalho com structs alocadas dinamicamente através de parâmetros de função.
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 Logic & Flow
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 Contato