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

Basándote en tu estructura Contact de la lección anterior, crea una función que asigne dinámicamente memoria para un nuevo contacto. 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 con tamaño 50
    • Un arreglo de caracteres phone con tamaño 20
    • Un arreglo de caracteres email con tamaño 40
    • Un entero age
  2. Escribir una función llamada createContact que:
    • No reciba parámetros
    • Devuelva un puntero a una estructura Contact
    • Use malloc() para asignar dinámicamente memoria para una estructura Contact
    • Verifique si la asignación de memoria fue exitosa:
      • Si la asignación falla (devuelve NULL), imprima Memory allocation failed y devuelva NULL
      • Si la asignación tiene éxito, imprima Contact created successfully
    • Inicialice todos los miembros de la estructura con valores predeterminados usando el operador de flecha:
      • Establezca name como una cadena vacía usando contactPtr->name[0] = '\0';
      • Establezca phone como una cadena vacía usando contactPtr->phone[0] = '\0';
      • Establezca email como una cadena vacía usando contactPtr->email[0] = '\0';
      • Establezca age a 0 usando contactPtr->age = 0;
    • Devuelva el puntero al contacto recién creado
  3. En la función main:
    • Declarar un puntero a una estructura Contact llamado newContact
    • Llamar a la función createContact y asignar el puntero devuelto a newContact
    • Verificar si la creación del contacto fue exitosa:
      • Si newContact es NULL, imprima Failed to create contact y finalice el programa
      • Si tiene éxito, imprima Contact initialized with default values
    • Mostrar la información del contacto inicializado usando el operador de flecha en este formato exacto:
      • Default Contact Values:
      • Name: %s (estará vacío)
      • Phone: %s (estará vacío)
      • Email: %s (estará vacío)
      • Age: %d (será 0)
    • Liberar la memoria asignada dinámicamente usando free(newContact)
    • Imprimir Memory freed successfully

Este desafío introduce el concepto de funciones de fábrica (factory functions): 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 a través de punteros y la limpieza 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