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
e
e mostre todos os compromissos do mês
do ano
. Repita o procedimento até ler
.
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.
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().
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>
#include <string.h>
typedef struct {
int dia;
int mes;
int ano;
} Data;
int dia;
int mes;
int ano;
} Data;
typedef struct {
char desc[61];
Data data;
} Compromisso;
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
}
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;
}