Menu
Coddy logo textTech

Função para Criar um Contato

Parte da seção Lógica e Fluxo 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 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 principal:
    • Declare um ponteiro para uma struct Contact chamado newContact
    • Chame a função createContact e atribua o ponteiro retornado a newContact
    • Verifique se a criação do contato foi bem-sucedida:
      • Se newContact for NULL, imprima Failed to create contact e encerre o programa
      • Se for bem-sucedida, imprima Contact initialized with default values
    • Exiba as informações do contato inicializado usando o operador seta neste formato exato:
      • Default Contact Values:
      • Name: [name] (estará vazio)
      • Phone: [phone] (estará vazio)
      • Email: [email] (estará vazio)
      • Age: [age] (será 0)
    • Libere a memória alocada dinamicamente usando free(newContact)
    • Imprima Memory freed successfully

Este desafio introduz o conceito de funções fábrica — funções que criam e retornam ponteiros para structs alocadas dinamicamente. Você praticará alocação dinâmica de memória, verificação adequada de erros, inicialização de structs por meio de ponteiros e liberação 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 Lógica e Fluxo

Pratique por conta própria: Compilador de C online