Menu
Coddy logo textTech

Función para rellenar un contacto

Parte de la sección Lógica y Flujo del Journey de C de Coddy. Lección 52 de 63.

challenge icon

Desafío

Fácil

Partiendo de tu función de creación de contactos de la lección anterior, crea una función que complete un contacto con datos introducidos por el usuario. Tu programa debe:

  1. Usar la misma definición de estructura Contact de las lecciones anteriores, con los siguientes 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 una estructura Contact
    • Inicializa todos los miembros con valores predeterminados
    • Devuelve un puntero al contacto
  3. Escribir una función llamada populateContact que:
    • Reciba un puntero a una estructura Contact como parámetro
    • No devuelva nada (void)
    • Solicite datos 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 todos los datos, valide la información:
      • 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 que 10 caracteres (use strlen()), imprima Invalid phone number
      • Si todas las validaciones se superan, imprima Contact populated successfully
  4. En la función main:
    • Cree un contacto usando la función createContact
    • Compruebe si la creación del contacto se realizó correctamente
    • Llame a la función populateContact para completar los datos del contacto
    • Después de completarlo, muestre la información del contacto usando el operador 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 modifiquen los datos de una estructura mediante punteros. La función populateContact recibe un puntero al contacto y utiliza el operador flecha para modificar directamente los miembros de la estructura original. Practicarás el manejo de datos introducidos por el usuario, la validación de datos y el trabajo con estructuras asignadas dinámicamente mediante 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 Lógica y Flujo

Practica por tu cuenta: Compilador de C online