Función para rellenar un contacto
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 52 de 63.
Desafío
FácilBasá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:
- Usar la misma definición de struct
Contactde las lecciones anteriores con los miembros:- Un arreglo de caracteres
namecon tamaño 50 - Un arreglo de caracteres
phonecon tamaño 20 - Un arreglo de caracteres
emailcon tamaño 40 - Un entero
age
- Un arreglo de caracteres
- Usar la misma función
createContactde 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
- Asigna memoria dinámicamente para un struct
- Escribir una función llamada
populateContactque:- Tome un puntero a un struct
Contactcomo 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 usandoscanf("%s", contactPtr->name) - Imprima
Enter phone:y lea una cadena en el campo phone usandoscanf("%s", contactPtr->phone) - Imprima
Enter email:y lea una cadena en el campo email usandoscanf("%s", contactPtr->email) - Imprima
Enter age:y lea un entero en el campo age usandoscanf("%d", &contactPtr->age)
- Imprima
- 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()), imprimaInvalid phone number - Si todas las validaciones pasan, imprima
Contact populated successfully
- Si age es menor que 0 o mayor que 120, imprima
- Tome un puntero a un struct
- 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
populateContactpara 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
- Cree un contacto usando la función
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
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenas6Gestión de memoria
Memoria Stack vs. HeapAsignación dinámica - malloc()Uso de sizeof() para la asignaciónComprobación de fallos de asignaciónLiberación de memoria con free()Asignación con calloc()Resumen: Arrays dinámicos9Proyecto: Registro de contacto simple
Proyecto: Definir la estructura ContactFunción para crear un contacto