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:
  • 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:
  1. Pede o nome (printf + fgets ou scanf);
  2. Usa strlen(lista[i].nome) pra ver o tamanho (lembra que fgets traz o \n, então dá pra remover);
  3. Se for > 15, avisa o usuário e decrementa i pra repetir o mesmo índice;
  4. 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.

Exercícios relacionados