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.
Desafío
FácilPartiendo 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:
- Usar la misma definición de estructura
Contactde las lecciones anteriores, con los siguientes 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 una estructura
Contact - Inicializa todos los miembros con valores predeterminados
- Devuelve un puntero al contacto
- Asigna memoria dinámicamente para una estructura
- Escribir una función llamada
populateContactque:- Reciba un puntero a una estructura
Contactcomo 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 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 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()), imprimaInvalid phone number - Si todas las validaciones se superan, imprima
Contact populated successfully
- Si age es menor que 0 o mayor que 120, imprima
- Reciba un puntero a una estructura
- 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
populateContactpara 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
- Cree un contacto usando la función
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
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 contactoPractica por tu cuenta: Compilador de C online