Ir ao conteúdo

C Uniar duas structs para fazer uma busca e imprimir um resultado


Posts recomendados

Postado

Estou com um problema e não consigo resolver. Eu preciso associar duas structs (uma de compromisso e outra da data - dia, mês e ano - desse compromisso) para fazer uma busca e imprimir um resultado. Vou deixar o que eu fiz até agora aqui em baixo. Está tudo funcionando bem, só que ainda não responde corretamente o exercício porque não faz a busca no vetor para encontrar e imprimir apenas os compromissos de um determinado mês e ano lidos. Em vez disso, imprime todos os cinco compromissos e datas lidas. Mas eu preciso que imprima apenas os compromissos no mês e ano informados pelo usuário.

 

Não sei como terminar o código. Alguém pode me ajudar? Obrigado!

 

Código em Linguagem de Programação C.

/* 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. */



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>



struct agenda_de_compromissos {
    char compromisso[60];
};
struct agenda_de_compromissos agenda[5];



struct data {
    int dia, mes, ano;
};
struct data dt[5];



int main() {
    setlocale(LC_ALL,"portuguese");
    
    int i = 0, M = 0, A = 0;
    printf("Preenchendo a agenda:\n\n");
    for (i = 0; i < 5; i++) {
        printf("Informe qual é o %dº compromisso: ", i+1);
        scanf("%[^\n]s", &agenda[i].compromisso);
        fflush(stdin);
        printf("Digite o dia do %dº compromisso: ", i+1);
        scanf("%d", &dt[i].dia);
        fflush(stdin);
        printf("Digite o mês do %dº compromisso: ", i+1);
        scanf("%d", &dt[i].mes);
        fflush(stdin);
        printf("Digite o ano do %dº compromisso: ", i+1);
        scanf("%d", &dt[i].ano);
        fflush(stdin);
        printf("\n\n");
    }
    
    printf("Digite dois números inteiro (correspondentes a um ano e um mês) para ver todos os compromissos durante esse período:\n");
    scanf("%d %d", &M, &A);
    
    printf("Compromissos nesse período:\n");
    for (i = 0; i < 5; i++) {
        printf("\nComproisso: %s", agenda[i].compromisso);
        printf("\nDia do compromisso: %d.", dt[i].dia);
        printf("\nMês do compromisso: %d.", dt[i].mes);
        printf("\nAno do compromisso: %d.\n", dt[i].ano);
        printf("\n\n");
    }    
    return 0;
}

 

Postado
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>



struct data {
    int dia, mes, ano;
};



struct agenda_de_compromissos {
    char compromisso[60];
    data datas;
};

struct agenda_de_compromissos agenda[5];






int main() {
    setlocale(LC_ALL,"portuguese");
    
    int i = 0, M = 0, A = 0;
    printf("Preenchendo a agenda:\n\n");
    for (i = 0; i < 5; i++) {
        printf("Informe qual é o %dº compromisso: ", i+1);
        scanf("%[^\n]s", &agenda[i].compromisso);
        fflush(stdin);
        printf("Digite o dia do %dº compromisso: ", i+1);
        scanf("%d", &agenda[i].datas.dia);
        fflush(stdin);
        printf("Digite o mês do %dº compromisso: ", i+1);
        scanf("%d", &agenda[i].datas.mes);
        fflush(stdin);
        printf("Digite o ano do %dº compromisso: ", i+1);
        scanf("%d", &agenda[i].datas.ano);
        fflush(stdin);
        printf("\n\n");
    }
    
    printf("Digite dois números inteiro (correspondentes a um ano e um mês) para ver todos os compromissos durante esse período:\n");
    scanf("%d %d", &M, &A);
    
    printf("Compromissos nesse período:\n");
    for (i = 0; i < 5; i++) {
        if ((agenda[i].datas.mes == M) && (agenda[i].datas.ano == A))
        {
            printf("\nCompromisso: %s", agenda[i].compromisso);
            printf("\nDia do compromisso: %d.", agenda[i].datas.dia);
            printf("\nMês do compromisso: %d.", agenda[i].datas.mes);
            printf("\nAno do compromisso: %d.\n", agenda[i].datas.ano);
            printf("\n\n");
        }
    }    
    return 0;
}

Veja se funciona com essas correções (não testtei).

  • Obrigado 1
Postado

@Visitante     você pode usar apenas uma struct , e seria mais fácil :

#include <stdio.h>
#include <windows.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
void	esperai();
struct agenda_de_compromissos
{
    char compromisso[60];
    int dia, mes, ano;
};
struct agenda_de_compromissos agenda[5];
int main()
{
    setlocale(LC_ALL,"portuguese");
    int i = 0, M = 0, A = 0;
    printf("Preenchendo a agenda:\n\n");
    do{
        printf("Informe qual é o %dº compromisso: ", i+1);
        fflush(stdin);
        scanf("%[^\n]s", &agenda[i].compromisso);
        printf("Digite o dia do %dº compromisso: ", i+1);
        fflush(stdin);
        scanf("%d", &agenda[i].dia);
        printf("Digite o mês do %dº compromisso: ", i+1);
        fflush(stdin);
        scanf("%d", &agenda[i].mes);
        printf("Digite o ano do %dº compromisso: ", i+1);
        fflush(stdin);
        scanf("%d", &agenda[i].ano);
        printf("Outro Cadastramento S/N\n\n");
    }while( toupper((char)getch()) !='N');

    printf("Digite dois números inteiro\
           \n(correspondentes a um ano e um mês)\
           \npara ver todos os compromissos durante esse período:\n");
    scanf("%d %d", &M, &A);

    printf("\nCompromissos nesse período:\n\n");
    for (i = 0; i < 5; i++) {
        if(agenda[i].mes ==M && agenda[i].ano == A)
        {
            printf("Comproisso ---------: %s.\n", agenda[i].compromisso);
            printf("Dia do compromisso -: %3d.\n", agenda[i].dia        );
            printf("Mês do compromisso -: %3d.\n", agenda[i].mes        );
            printf("Ano do compromisso -: %3d.\n", agenda[i].ano        );
            printf("\n");
            break;
        }
    }
    esperai();
    return 32768;
}
void	esperai()
{
  printf("      Tecle ! ");
  FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
  WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), INFINITE);
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!