typedef com Structs
Parte da seção Lógica e Fluxo do Journey de C da Coddy. Lição 59 de 63.
Uma das aplicações mais práticas de typedef é criar aliases para tipos struct. Isso elimina a necessidade de escrever repetidamente a palavra-chave struct sempre que você declara uma variável desse tipo, tornando seu código mais limpo e legível.
Quando você combina typedef com uma definição de struct, pode criar um novo nome de tipo que se refere diretamente à struct. Veja a sintaxe:
typedef struct Point {
int x;
int y;
} Point;Agora, em vez de escrever struct Point p1; sempre que precisar de uma variável Point, você pode simplesmente escrever Point p1;. Ambas as declarações fazem exatamente a mesma coisa, mas a versão com typedef é mais concisa e fácil de ler.
Essa abordagem é especialmente valiosa em programas maiores, nos quais você trabalha frequentemente com tipos de dados personalizados. Ela faz com que seu código se pareça mais com o de outras linguagens de programação e reduz a poluição visual de digitar repetidamente struct ao longo do seu programa.
Desafio
FácilCrie um programa em C que demonstre o uso de typedef com structs para construir um sistema simples de inventário de livros. Seu programa deve:
- Definir uma
structchamadaBookcom os seguintes membros:- Um inteiro
id - Um array de caracteres
titlecom tamanho 50 - Um float
price - Um inteiro
quantity
- Um inteiro
- Usar
typedefpara criar um alias de tipo chamadoBookpara astruct Book - Na função main:
- Declarar duas variáveis do tipo
Bookchamadasbook1ebook2 - Ler os dados do primeiro livro nesta ordem: ID, título, preço, quantidade
- Atribuir esses valores aos membros de
book1 - Ler os dados do segundo livro nesta ordem: ID, título, preço, quantidade
- Atribuir esses valores aos membros de
book2 - Imprimir as informações dos dois livros neste formato exato:
Book 1: ID=[id], Title=[title], Price=[price], Quantity=[quantity]Book 2: ID=[id], Title=[title], Price=[price], Quantity=[quantity]
- Calcular e imprimir o valor total do inventário de cada livro (preço × quantidade) neste formato exato:
Book 1 Total Value: [total_value]Book 2 Total Value: [total_value]
- Calcular e imprimir o valor combinado do inventário dos dois livros neste formato exato:
Combined Inventory Value: [combined_value] - Determinar e imprimir qual livro tem o maior valor total:
- Se o valor total de book1 for maior: imprimir
Book 1 has higher value - Se o valor total de book2 for maior: imprimir
Book 2 has higher value - Se ambos tiverem o mesmo valor: imprimir
Both books have equal value
- Se o valor total de book1 for maior: imprimir
- Declarar duas variáveis do tipo
Este desafio demonstra como o uso de typedef com structs elimina a necessidade de escrever repetidamente struct Book em todo o programa. Em vez de declarar variáveis como struct Book book1;, você pode simplesmente escrever Book book1;, tornando seu código mais limpo e legível. Você praticará a combinação da definição de uma struct com typedef, o trabalho com membros de structs e a realização de cálculos usando dados de structs.
Experimente você mesmo
#include <stdio.h>
#include <string.h>
// TODO: Defina sua struct e typedef aqui
int main() {
// TODO: Declare suas variáveis Book aqui
// Ler a entrada para o primeiro livro
int id1, quantity1;
char title1[50];
float price1;
scanf("%d", &id1);
scanf("%s", title1);
scanf("%f", &price1);
scanf("%d", &quantity1);
// TODO: Atribua valores aos membros de book1
// Ler a entrada para o segundo livro
int id2, quantity2;
char title2[50];
float price2;
scanf("%d", &id2);
scanf("%s", title2);
scanf("%f", &price2);
scanf("%d", &quantity2);
// TODO: Atribua valores aos membros de book2
// TODO: Imprima as informações do livro, calcule os valores e compare
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um ContatoPratique por conta própria: Compilador de C online