Menu
Coddy logo textTech

Función para crear un contacto

Parte de la sección Logic & Flow del Journey de C de Coddy. Lección 51 de 63.

challenge icon

Desafío

Fácil

Partiendo de tu estructura Contact de la lección anterior, crea una función que asigne memoria dinámicamente para un contacto nuevo. Tu programa debe:

  1. Usar la misma definición de la estructura Contact de la lección anterior con los miembros:
    • Un arreglo de caracteres name de tamaño 50
    • Un arreglo de caracteres phone de tamaño 20
    • Un arreglo de caracteres email de tamaño 40
    • Un entero age
  2. Escribir una función llamada createContact que:
    • No acepte parámetros
    • Devuelva un puntero a una estructura Contact
    • Use malloc() para asignar dinámicamente memoria para una estructura Contact
    • Compruebe si la asignación de memoria tuvo éxito:
      • Si la asignación falla (devuelve NULL), imprime Memory allocation failed y devuelve NULL
      • Si la asignación tiene éxito, imprime Contact created successfully
    • Inicialice todos los miembros de la estructura con valores default usando el operador flecha:
      • Establece name como una cadena vacía usando contactPtr->name[0] = '\0';
      • Establece phone como una cadena vacía usando contactPtr->phone[0] = '\0';
      • Establece email como una cadena vacía usando contactPtr->email[0] = '\0';
      • Establece age en 0 usando contactPtr->age = 0;
    • Devuelva el puntero al contacto recién creado
  3. En la función main:
    • Declara un puntero a una estructura Contact llamado newContact
    • Llama a la función createContact y asigna el puntero devuelto a newContact
    • Comprueba si la creación del contacto tuvo éxito:
      • Si newContact es NULL, imprime Failed to create contact y termina el programa
      • Si tiene éxito, imprime Contact initialized with default values
    • Muestra la información del contacto inicializado usando el operador flecha exactamente en este formato:
      • Default Contact Values:
      • Name: [name] (estará vacío)
      • Phone: [phone] (estará vacío)
      • Email: [email] (estará vacío)
      • Age: [age] (será 0)
    • Libera la memoria asignada dinámicamente usando free(newContact)
    • Imprime Memory freed successfully

Este desafío introduce el concepto de funciones de fábrica: funciones que crean y devuelven punteros a estructuras asignadas dinámicamente. Practicarás la asignación dinámica de memoria, la comprobación adecuada de errores, la inicialización de estructuras mediante punteros y la liberación de memoria.

Pruébalo tú mismo

#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 las lecciones de Logic & Flow

Practica por tu cuenta: Compilador de C online