Faça um programa que seja uma agenda de compromissos e:
  • Crie e leia um vetor de 5 estruturas de dados com: compromisso (máximo 60 letras) e data. A data deve ser outra estrutura de dados contendo dia, mês e ano.
  • Leia dois inteiros M e A e mostre todos os compromissos do mês M do ano A. Repita o procedimento até ler M=0.

Passo 1

O enunciado pede um programa em C que funcione como uma pequena agenda de 5 compromissos, cada um com descrição (até 60 caracteres) e data (dia, mês e ano). Depois de ler esses 5 compromissos, o programa deve ler pares de inteiros M e A e mostrar todos os compromissos cujo mês seja M e ano seja A, repetindo até que M=0.

Passo 2

Começamos definindo duas estruturas: uma para a data (com campos dia, mês e ano) e outra para o compromisso (com um array de char para a descrição e um campo desse tipo data).
Em seguida, declaramos um vetor de 5 elementos do tipo compromisso e fazemos um laço de 0 a 4 para ler cada compromisso. Para ler a string usamos fgets e removemos o ‘\n’ final; depois usamos scanf para ler dia, mês e ano, e consumimos o ‘\n’ que fica no buffer.

Passo 3

Depois de ter lido todos os compromissos, entramos num laço infinito de consulta: pedimos mês e ano. Se o mês for 0, encerramos o programa. Caso contrário, percorremos o vetor de compromissos e imprimimos aqueles cuja data tenha mês igual a M e ano igual a A.
Por fim, encerramos o laço quando o usuário digitar M=0 e retornamos 0 em main().

Resposta

#include <stdio.h>
#include <string.h>
typedef struct {
int dia;
int mes;
int ano;
} Data;
typedef struct {
char desc[61];
Data data;
} Compromisso;
int main() {
Compromisso agenda[5];
for (int i = 0; i < 5; i++) {
printf("Digite o compromisso %d: ", i + 1);
fgets(agenda[i].desc, 61, stdin);
size_t len = strlen(agenda[i].desc);
if (len > 0 && agenda[i].desc[len - 1] == ‘\n’) {
agenda[i].desc[len - 1] = ‘\0’;
}
printf(“Digite dia mes ano: “);
scanf(”%d %d %d”, &agenda[i].data.dia, &agenda[i].data.mes, &agenda[i].data.ano);
getchar(); // consome o ‘\n’ sobrando
}
int M, A;
while (1) {
    printf("Digite mes e ano para consulta (0 para sair): ");
    scanf("%d", &M);
    if (M == 0) {
        break;
    }
    scanf("%d", &A);
    printf("Compromissos em %02d/%04d:\n", M, A);
    for (int i = 0; i < 5; i++) {
        if (agenda[i].data.mes == M && agenda[i].data.ano == A) {
            printf("%02d/%02d/%04d - %s\n",
                   agenda[i].data.dia,
                   agenda[i].data.mes,
                   agenda[i].data.ano,
                   agenda[i].desc);
        }
    }
}

return 0;
}

Exercícios relacionados