Función para crear un contacto
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 51 de 63.
Desafío
FácilBasá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:
- Usar la misma definición de la estructura
Contactde la lección anterior 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
- Escribir una función llamada
createContactque:- No reciba parámetros
- Devuelva un puntero a una estructura
Contact - Use
malloc()para asignar dinámicamente memoria para una estructuraContact - Verifique si la asignación de memoria fue exitosa:
- Si la asignación falla (devuelve NULL), imprima
Memory allocation failedy devuelva NULL - Si la asignación tiene éxito, imprima
Contact created successfully
- Si la asignación falla (devuelve NULL), imprima
- Inicialice todos los miembros de la estructura con valores predeterminados usando el operador de flecha:
- Establezca
namecomo una cadena vacía usandocontactPtr->name[0] = '\0'; - Establezca
phonecomo una cadena vacía usandocontactPtr->phone[0] = '\0'; - Establezca
emailcomo una cadena vacía usandocontactPtr->email[0] = '\0'; - Establezca
agea 0 usandocontactPtr->age = 0;
- Establezca
- Devuelva el puntero al contacto recién creado
- En la función main:
- Declarar un puntero a una estructura
ContactllamadonewContact - Llamar a la función
createContacty asignar el puntero devuelto anewContact - Verificar si la creación del contacto fue exitosa:
- Si
newContactes NULL, imprimaFailed to create contacty finalice el programa - Si tiene éxito, imprima
Contact initialized with default values
- Si
- 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
- Declarar un puntero a una estructura
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
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