Menu
Coddy logo textTech

Função para Preencher um Contato

Parte da seção Logic & Flow 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 a entrada do usuário. Seu programa deve:

  1. Usar a mesma definição de 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 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 usando scanf("%s", contactPtr->name)
      • Imprime Enter phone: e lê uma string para o campo phone usando scanf("%s", contactPtr->phone)
      • Imprime Enter email: e lê uma string para o campo email usando scanf("%s", contactPtr->email)
      • Imprime Enter age: e lê um inteiro para o campo age usando scanf("%d", &contactPtr->age)
    • 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()), imprime Invalid phone number
      • Se todas as validações passarem, imprime Contact populated successfully
  4. 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 populateContact para 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

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