typedef con structs
Parte de la sección Lógica y Flujo del Journey de C de Coddy. Lección 59 de 63.
Una de las aplicaciones más prácticas de typedef es crear alias para tipos struct. Esto elimina la necesidad de escribir repetidamente la palabra clave struct cada vez que declaras una variable de ese tipo, lo que hace que tu código sea más limpio y legible.
Cuando combinas typedef con una definición de estructura, puedes crear un nuevo nombre de tipo que se refiere directamente a la estructura. Esta es la sintaxis:
typedef struct Point {
int x;
int y;
} Point;Ahora, en lugar de escribir struct Point p1; cada vez que necesites una variable Point, puedes escribir simplemente Point p1;. Ambas declaraciones logran exactamente lo mismo, pero la versión con typedef es más concisa y fácil de leer.
Este enfoque es especialmente valioso en programas más grandes en los que trabajas con frecuencia con tipos de datos personalizados. Hace que tu código se parezca más al de otros lenguajes de programación y reduce el desorden visual de escribir repetidamente struct en todo tu programa.
Desafío
FácilCrea un programa en C que demuestre el uso de typedef con estructuras para crear un sistema sencillo de inventario de libros. Tu programa debe:
- Definir una
structllamadaBookcon los siguientes miembros:- Un entero
id - Un arreglo de caracteres
titlecon tamaño 50 - Un número de coma flotante
price - Un entero
quantity
- Un entero
- Usar
typedefpara crear un alias de tipo llamadoBookpara lastruct Book - En la función principal:
- Declarar dos variables de tipo
Bookllamadasbook1ybook2 - Leer la entrada del primer libro en este orden: ID, título, precio, cantidad
- Asignar estos valores a los miembros de
book1 - Leer la entrada del segundo libro en este orden: ID, título, precio, cantidad
- Asignar estos valores a los miembros de
book2 - Imprimir la información de ambos libros en este formato exacto:
Book 1: ID=[id], Title=[title], Price=[price], Quantity=[quantity]Book 2: ID=[id], Title=[title], Price=[price], Quantity=[quantity]
- Calcular e imprimir el valor total del inventario de cada libro (precio × cantidad) en este formato exacto:
Book 1 Total Value: [total_value]Book 2 Total Value: [total_value]
- Calcular e imprimir el valor combinado del inventario de ambos libros en este formato exacto:
Combined Inventory Value: [combined_value] - Determinar e imprimir qué libro tiene el valor total más alto:
- Si el valor total de book1 es mayor: imprimir
Book 1 has higher value - Si el valor total de book2 es mayor: imprimir
Book 2 has higher value - Si ambos tienen el mismo valor: imprimir
Both books have equal value
- Si el valor total de book1 es mayor: imprimir
- Declarar dos variables de tipo
Este desafío demuestra cómo typedef con estructuras elimina la necesidad de escribir repetidamente struct Book en todo el programa. En lugar de declarar variables como struct Book book1;, puedes escribir simplemente Book book1;, lo que hace que tu código sea más limpio y fácil de leer. Practicarás cómo combinar la definición de una estructura con typedef, trabajar con miembros de estructuras y realizar cálculos usando datos de estructuras.
Pruébalo tú mismo
#include <stdio.h>
#include <string.h>
// TODO: Define tu struct y typedef aquí
int main() {
// TODO: Declara tus variables Book aquí
// Lee la entrada del primer libro
int id1, quantity1;
char title1[50];
float price1;
scanf("%d", &id1);
scanf("%s", title1);
scanf("%f", &price1);
scanf("%d", &quantity1);
// TODO: Asigna valores a los miembros de book1
// Lee la entrada del segundo libro
int id2, quantity2;
char title2[50];
float price2;
scanf("%d", &id2);
scanf("%s", title2);
scanf("%f", &price2);
scanf("%d", &quantity2);
// TODO: Asigna valores a los miembros de book2
// TODO: Imprime la información del libro, calcula los valores y compara
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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 cadenasPractica por tu cuenta: Compilador de C online