Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Com 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:

  1. Usar a mesma definição da struct Contact das lições anteriores, 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. Usar a mesma função createContact da 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
  3. Escrever uma função chamada populateContact que:
    • Recebe um ponteiro para uma struct Contact como 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 usando scanf("%s", contactPtr->name)
      • Imprime Enter phone: e lê uma string no campo phone usando scanf("%s", contactPtr->phone)
      • Imprime Enter email: e lê uma string no campo email usando scanf("%s", contactPtr->email)
      • Imprime Enter age: e lê um inteiro no campo age usando scanf("%d", &contactPtr->age)
    • 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()), imprime Invalid phone number
      • Se todas as validações forem aprovadas, imprime Contact populated successfully
  4. 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 populateContact para 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

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

Pratique por conta própria: Compilador de C online