Fazer um programa que receba três nomes de no máximo 15 caracteres cada um (nomes com mais de 15 caracteres devem ser rejeitados) e as idades das respectivas pessoas em um vetor de estruturas de dados. Após o recebimento, listar os 3 nomes e idades que nela foram armazenados.
Passo 1
Beleza, amigo! O problema diz: “fazer um programinha que receba três nomes (cada um com até 15 caracteres; se passar disso, a gente rejeita e pede de novo) e as idades dessas pessoas. Depois, mostrar tudo na tela.”
Conteúdo: Programação em C (estruturas e vetores), laços de repetição, validação de string.
O que vamos precisar:
Conteúdo: Programação em C (estruturas e vetores), laços de repetição, validação de string.
O que vamos precisar:
- Definir uma
struct
para guardar nome e idade. - Um vetor com 3 dessas structs.
- Um loop pra ler e validar cada nome (usar
strlen
pra checar tamanho). - Outro loop (ou o mesmo) pra ler as idades.
- Finalmente, um
printf
pra listar os dados.
Passo 2
Primeiro, vamos falar de
struct
. Em C, struct
é um jeito de agrupar diferentes tipos de dados num só “pacotinho”. Aqui a gente quer guardar um char nome[16]
(mais o \0
) e um int idade
. Então fazemos:typedef struct {
char nome[16];
int idade;
} Pessoa;
Isso cria um novo tipo
Pessoa
que tem nome e idade juntos.Passo 3
Agora, o vetor. A gente quer armazenar 3 pessoas, então faz:
Pessoa lista[3];
Esse
lista
é um array de 3 estruturas Pessoa
. Cada lista[i]
tem nome
e idade
.Passo 4
Para ler e validar, usamos um
for (i = 0; i < 3; i++)
. Dentro dele:- Pede o nome (
printf
+fgets
ouscanf
); - Usa
strlen(lista[i].nome)
pra ver o tamanho (lembra quefgets
traz o\n
, então dá pra remover); - Se for > 15, avisa o usuário e decrementa
i
pra repetir o mesmo índice; - Se tudo ok, pede a idade (
scanf("%d", &lista[i].idade)
).
Passo 5
Depois de ler tudo, é só dar outro
for
de 0 a 2 e imprimir com:printf("Nome: %s Idade: %d\n", lista[i].nome, lista[i].idade);
Resposta
#include <stdio.h>
#include <string.h>
typedef struct {
char nome[16];
int idade;
} Pessoa;
int main() {
Pessoa lista[3];
int i;
for (i = 0; i < 3; i++) {
char buffer[100];
// Leitura e validação do nome
printf("Digite o nome %d (max 15 chars): ", i+1);
fgets(buffer, sizeof(buffer), stdin);
// remover '\n' se existir
buffer[strcspn(buffer, "\n")] = '\0';
if (strlen(buffer) > 15) {
printf("Nome muito longo! Tente de novo.\n");
i--; // repete este índice
continue;
}
strcpy(lista[i].nome, buffer);
// Leitura da idade
printf("Digite a idade de %s: ", lista[i].nome);
scanf("%d%*c", &lista[i].idade); // %*c pra consumir '\n'
}
printf("\n=== Lista de Pessoas ===\n");
for (i = 0; i < 3; i++) {
printf("Nome: %s Idade: %d\n", lista[i].nome, lista[i].idade);
}
return 0;
}
Esse código resolve o que foi pedido: valida o tamanho do nome, guarda em vetor de structs e mostra tudo no final.