Menu
Coddy logo textTech

Función para rellenar un contacto

Parte de la sección Logic & Flow del Journey de C de Coddy — lección 52 de 63.

challenge icon

Desafío

Fácil

Basándote en tu función de creación de contactos de la lección anterior, crea una función que rellene un contacto con la entrada del usuario. Tu programa debe:

  1. Usar la misma definición de struct Contact de las lecciones anteriores 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. Usar la misma función createContact de la lección anterior que:
    • Asigna memoria dinámicamente para un struct Contact
    • Inicializa todos los miembros a valores por defecto
    • Devuelve un puntero al contacto
  3. Escribir una función llamada populateContact que:
    • Tome un puntero a un struct Contact como su parámetro
    • No devuelva nada (void)
    • Solicite entrada al usuario y lea los siguientes datos en este orden exacto:
      • Imprima Enter name: y lea una cadena en el campo name usando scanf("%s", contactPtr->name)
      • Imprima Enter phone: y lea una cadena en el campo phone usando scanf("%s", contactPtr->phone)
      • Imprima Enter email: y lea una cadena en el campo email usando scanf("%s", contactPtr->email)
      • Imprima Enter age: y lea un entero en el campo age usando scanf("%d", &contactPtr->age)
    • Después de leer toda la entrada, valide los datos:
      • Si age es menor que 0 o mayor que 120, imprima Invalid age entered
      • Si la longitud del número de teléfono es menor de 10 caracteres (usa strlen()), imprima Invalid phone number
      • Si todas las validaciones pasan, imprima Contact populated successfully
  4. En la función main:
    • Cree un contacto usando la función createContact
    • Verifique si la creación del contacto fue exitosa
    • Llame a la función populateContact para completar los datos del contacto
    • Después de completar, muestre la información del contacto usando el operador de flecha en este formato exacto:
      • Contact Information:
      • Name: [name]
      • Phone: [phone]
      • Email: [email]
      • Age: [age]
    • Libere la memoria asignada dinámicamente
    • Imprima Contact deleted successfully

Este desafío demuestra cómo crear funciones que modifican los datos de un struct a través de punteros. La función populateContact recibe un puntero al contacto y utiliza el operador de flecha para modificar directamente los miembros del struct original. Practicarás el manejo de la entrada del usuario, la validación de datos y el trabajo con structs asignados dinámicamente a través de parámetros de función.

Pruébalo tú mismo

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