Ir ao conteúdo
  • Cadastre-se

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


Visitante

Posts recomendados

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;
}

 

Link para o comentário
Compartilhar em outros sites

#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).

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@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);
}

 

Link para o comentário
Compartilhar em outros sites

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!