Menu
Coddy logo textTech

Função para Criar um Contato

Parte da seção Logic & Flow do Journey de C da Coddy — lição 51 de 63.

challenge icon

Desafio

Fácil

Com base na sua struct Contact da lição anterior, crie uma função que aloque dinamicamente memória para um novo contato. Seu programa deve:

  1. Usar a mesma definição da struct Contact da lição anterior com os membros:
    • Um array de caracteres name com tamanho 50
    • Um array de caracteres phone com tamanho 20
    • Um array de caracteres email com tamanho 40
    • Um inteiro age
  2. Escrever uma função chamada createContact que:
    • Não recebe parâmetros
    • Retorna um ponteiro para uma struct Contact
    • Usa malloc() para alocar dinamicamente memória para uma struct Contact
    • Verifica se a alocação de memória foi bem-sucedida:
      • Se a alocação falhar (retornar NULL), imprime Memory allocation failed e retorna NULL
      • Se a alocação for bem-sucedida, imprime Contact created successfully
    • Inicializa todos os membros da struct com valores padrão usando o operador de seta:
      • Define name como uma string vazia usando contactPtr->name[0] = '\0';
      • Define phone como uma string vazia usando contactPtr->phone[0] = '\0';
      • Define email como uma string vazia usando contactPtr->email[0] = '\0';
      • Define age como 0 usando contactPtr->age = 0;
    • Retorna o ponteiro para o contato recém-criado
  3. Na função main:
    • Declarar um ponteiro para uma struct Contact chamado newContact
    • Chamar a função createContact e atribuir o ponteiro retornado a newContact
    • Verificar se a criação do contato foi bem-sucedida:
      • Se newContact for NULL, imprimir Failed to create contact e encerrar o programa
      • Se for bem-sucedido, imprimir Contact initialized with default values
    • Exibir as informações do contato inicializado usando o operador de seta neste formato exato:
      • Default Contact Values:
      • Name: [name] (estará vazio)
      • Phone: [phone] (estará vazio)
      • Email: [email] (estará vazio)
      • Age: [age] (será 0)
    • Liberar a memória alocada dinamicamente usando free(newContact)
    • Imprimir Memory freed successfully

Este desafio introduz o conceito de funções de fábrica (factory functions) - funções que criam e retornam ponteiros para structs alocadas dinamicamente. Você praticará alocação dinâmica de memória, verificação de erros adequada, inicialização de structs através de ponteiros e limpeza de memória.

Experimente você mesmo

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

// TODO: Define the Contact struct here
struct Contact {
    char name[50];
    char phone[20];
    char email[40];
    int age;
};

int main() {
    // TODO: Create a Contact variable named person
    struct Contact person;
    
    // Read input values
    scanf("%s", person.name);
    scanf("%s", person.phone);
    scanf("%s", person.email);
    scanf("%d", &person.age);
    
    // TODO: Write your validation and output code below
    if (person.age < 0 || person.age > 120) {
        printf("Invalid age");
        return 0;
    }
    
    if (strlen(person.phone) < 10) {
        printf("Invalid phone number");
        return 0;
    }
    
    printf("Contact Information:\n");
    printf("Name: %s\n", person.name);
    printf("Phone: %s\n", person.phone);
    printf("Email: %s\n", person.email);
    printf("Age: %d\n", person.age);
    
    printf("Name length: %lu\n", strlen(person.name));
    
    if (person.age >= 0 && person.age <= 17) {
        printf("Category: Minor");
    } else if (person.age >= 18 && person.age <= 64) {
        printf("Category: Adult");
    } else {
        printf("Category: Senior");
    }
    
    return 0;
}

Todas as lições de Logic & Flow