Ir ao conteúdo
  • Cadastre-se

C validar o mes de fevereio


Ir à solução Resolvido por devair1010,

Posts recomendados

olá, eu tenho esse código, e o objetivo é verificar o mês de fevereiro, mas infelizmente quando a data ta certa ele não faz a condição que eu quero e simplesmente o programa termina. Ou seja, ele tinha que ver o if do carater e imprimir a idade, a data 29 02 2020  o programa aceita esta data só que termina imediatamente o programa. podem ajudar-me , por favor.

 

 

 

#include <stdio.h>

int main (void)

{

    char carater ;

    int dia_do_nascimento, mes_do_nascimento, ano_do_nascimento;

    int dia, mes, ano, calcula_idade;

    int dia1,ano1,mes1;

    int junto, idade;

     

    scanf("%c %d %d %d %d %d %d", &carater, &dia_do_nascimento, &mes_do_nascimento, &ano_do_nascimento, &dia, &mes, &ano);

 

    if(dia >31){

        if(mes == 1 || mes ==3 || mes ==5 || mes ==7 || mes ==8 || mes ==10 || mes == 12){

            printf("Data actual invalida \n");

        }

    }else if(dia>30){

        if (mes == 4 || mes == 6 || mes == 9 || mes == 11){

            printf("Data actual invalida \n");

        }

        

}else if(mes == 2 && dia >28){

            if(!(ano%4 == 0 && ano %100 != 0) || ano % 400 == 0){

                printf("Data actual invalida \n");

            }

}else if(mes == 2 && dia >29){

            if(!(ano%4 == 0 && ano %100 != 0) || ano % 400 == 0){

                printf("Data actual invalida \n");

            }

    }else{

 

        if(dia_do_nascimento>31){

            if(mes_do_nascimento == 1 || mes_do_nascimento ==3 || mes_do_nascimento ==5 || mes_do_nascimento ==7

            || mes_do_nascimento ==8 || mes_do_nascimento ==10 || mes_do_nascimento == 12){

                printf("Data de nascimento invalida \n");

            }

        }else if(dia_do_nascimento>30){

            if (mes_do_nascimento == 4 || mes_do_nascimento == 6 || mes_do_nascimento == 9 || mes_do_nascimento == 11){

            printf("Data de nascimento invalida \n");

            }

 

        }else{

 

            if((dia_do_nascimento<1 || dia_do_nascimento>31) || (dia<1 || dia >31)){

                printf("Data de nascimento invalida \n");   

 

            }else{

 

                if((mes_do_nascimento <1 || mes_do_nascimento >12) || (ano_do_nascimento<=1900 || ano_do_nascimento>2020) || (mes<mes_do_nascimento && ano == ano_do_nascimento)){

                    printf("Data de nascimento invalida \n");   

 

                }else{

                

                    if((mes<1 || mes>12) || (ano <=1900 || ano > 2020)){

                        printf("Data actual invalida \n");

                            

                    }else{

                            

                        if((ano < ano_do_nascimento) || (dia<dia_do_nascimento && ano_do_nascimento == ano)){

                            printf("Data actual inferior a data de nascimento");

                            

                        }else{

                            

                            if (carater == 'a'){

                                

                                calcula_idade =   365*ano + 30*mes + dia- 365*ano_do_nascimento - 30*mes_do_nascimento - dia_do_nascimento;

                                

                                ano1 = calcula_idade/365;

                                calcula_idade = calcula_idade%365;

                                

                                mes1 = calcula_idade/30;

                                calcula_idade = calcula_idade%30;

                                

                                dia1 = calcula_idade;

                                printf("%d anos", ano1);

}

}

}

}

}

se alguem poder ajudar, é importante

Link para o comentário
Compartilhar em outros sites

@catherineprokhorov     dependendo de qual compilador você  está usando ,  como e Dev c++ ,  ele fecha o console rápido ao terminar , e para que ele espere ate que se possa ver o resultado , você pode colocar um comando , que pode ser o scanf ,  ou fgets , ou getch  ou system("pause");     , que precisa da biblioteca #include<stdlib.h> ,  no final do código antes da chave de finalização .

Link para o comentário
Compartilhar em outros sites

@catherineprokhorov   se você puder poste o enunciado desse exercício ,  será mais fácil saber o que precisa fazer ,. pois se for apenas calcular a idade poderia ser assim :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    char carac,c;
    int d_nasc, m_nasc, a_nasc;
    int d_atual, m_atual, a_atual;
    int idade;
    printf("um caractere ");
    scanf("%c", &carac);
    while ((c = fgetc(stdin)) != '\n'); // limpa o Buffer do teclado
    do
    {
        printf("dia do nascimento ");
        scanf("%d", &d_nasc);
    } while (d_nasc < 1 || d_nasc > 31); // repete até ser válido
    do
    {
        printf("mes do nascimento ");
        scanf("%d", &m_nasc);
    } while (m_nasc < 1 || m_nasc > 12);  // repete até ser válido
    printf("ano do nascimento ");// pode ser Qualquer ano
    scanf("%d", &a_nasc);
    do
    {
        printf("dia atual ");
        scanf("%d", &d_atual);
    } while (d_atual < 1 || d_atual > 31); // repete até ser válido
    do
    {
        printf("mes atual ");
        scanf("%d", &m_atual);
    } while (m_atual < 1 || m_atual > 12); // repete até ser válido
    do
    {
        printf("ano atual ");// ano atual não pode ser menor que ano de nascimento
        scanf("%d", &a_atual);
    } while (a_atual < a_nasc); // repete até ser válido
    idade = a_atual - a_nasc; // calcula o periodo entre as datas 
    printf("\na idade eh : %d\n\n", idade);
    printf("         tecle Enter\n\n\n");
    while ((c = fgetc(stdin)) != '\n');
    scanf("%c", &c);
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@devair1010 

zodiac

Pretende-se fazer um programa que com base na data de nascimento e data actual determina a idade e o signo do zodiaco. Além disso, o programa deverá também determinar se a pessoa está apta para trabalhar (idade >= 16) ou se é elegível para a reforma (idade >= 66 anos e 5 meses)

 

Descrição do problema

O programa recebe um caracter e 6 inteiros. O caracter serve para escolher qual o output a apresentar:

'a' - idadade

'z' - signo do zodiaco

'r' - informação sobre se está apto para trabalhar ou elegível para a reforma

't' - toda a informação

Os 6 inteiros correspondem a dia, mês e ano de nascimento e dia, mês e ano atual

Exemplo:

a 05 08 2015 01 01 2020

Opção 'a'

O programa deverá devolver a idade do utilizador Exemplo:

a 11 1 1970 2 6 2020 50 anos

 

 

 

 

 

o exercício pede para fazer um ZODIACO, eu depois posso partilhar o código inteiro, mas só me falta validar o mes de fevereiro, ver quando ele tem 28 e quando terá 29 dias.

por exemplo se ele tiver 28 dias em 2020 e o utilizador colocou 29 dias aquilo tem que apresentar a mensagem: data atual invalida, e caso seja verdade teria que aparecer no output:

a 15 09 2000 20 03 2020

20 anos

e o que aparece é :

a 15 09 2000 20 03 2020

e neste exercício não é permitido ciclos infelizmente

Link para o comentário
Compartilhar em outros sites

  • Solução

@catherineprokhorov    esses cálculos são mesmos difíceis e esse mês de fevereiro poderia se validado assim  :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    char carater;
    int dia_do_nascimento, mes_do_nascimento, ano_do_nascimento;
    int dia, mes, ano, calcula_idade;
    int dia1, ano1, mes1;
    int junto, idade;
    scanf("%c %d %d %d %d %d %d", &carater, &dia_do_nascimento, &mes_do_nascimento, &ano_do_nascimento, &dia, &mes, &ano);
    if (mes == 2 && dia > 29)
    {
        printf("Data atual invalida !\n");
        printf("Fevereiro com %d Dias\n", dia);
    }
    else
    {
        if (mes == 2 && dia == 29)
        {
            if (ano % 4 != 0)
            {
                printf("Data actual invalida \n");
                printf("mes de fevereiro com 29 dias e Ano nao eh divisiveL por Quatro !\n");
                if (ano % 100 == 0)
                {
                    printf("Data actual invalida \n");
                    printf("mes de fevereiro com 29 dias e Ano eh divisiveL por Cem !\n");
                }
                if (ano % 400 != 0)
                {
                    printf("Data actual invalida \n");
                    printf("mes de fevereiro com 29 dias e Ano nao eh divisiveL por Quatrocentos !\n");
                }
            }
        }
        else
        {
            if (dia > 31)
            {
                printf("Data actual invalida \n");
                printf("Nao existe nenhum mes com mais de 31 Dias !\n");
            }
            else
            {
                if (dia > 30)
                {
                    if (mes == 4 || mes == 6 || mes == 9 || mes == 11)
                    {
                        printf("Data actual invalida\n");
                        printf("mes %d com %d dias\n",mes, dia);
                    }
                }
                else
                {
                    if (dia_do_nascimento > 31)
                    {
                        printf("Data de nascimento invalida \n");
                        printf("Nao existe nenhum mes com mais de 31 Dias !\n");
                    }
                    else
                    {
                        if (dia_do_nascimento > 30)
                        {
                            if (mes_do_nascimento == 4 || mes_do_nascimento == 6 ||
                                mes_do_nascimento == 9 || mes_do_nascimento == 11)
                            {
                                printf("Data de nascimento invalida \n");
                                printf("Mes %d so pode ter 30 Dias !\n",mes_do_nascimento);
                            }
                        }
                        else
                        {
                            if (dia_do_nascimento <  1 || dia < 1  ||
                                dia_do_nascimento > 31 || dia > 31  )
                            {
                                printf("Data de nascimento invalida \n");
                                printf("Nao existe mes com %d Dias !\n",dia);
                            }
                            else
                            {
                                if ((mes_do_nascimento < 1 || mes_do_nascimento >   12) ||
                                    (ano_do_nascimento <= 1900 || ano_do_nascimento > 2020) ||
                                    (mes < mes_do_nascimento && ano == ano_do_nascimento))
                                {
                                    printf("Data de nascimento invalida !\n");
                                    if(mes_do_nascimento < 1 || mes_do_nascimento > 12)
                                    {
                                        printf("só pode ter messes de 1 ate 12 !\n"); 
                                    }
                                    if(ano_do_nascimento <= 1900 || ano_do_nascimento > 2020) 
                                    {
                                        printf("ano do nascimento Fora de Faixa , %d !\n",ano_do_nascimento); 
                                    }
                                    if(mes < mes_do_nascimento && ano == ano_do_nascimento)
                                    {
                                        printf("mes do nascimento Fora de Faixa !\n"); 
                                    }
                                }
                                else
                                {
                                    if ((mes < 1 || mes>12) || (ano <= 1900 || ano > 2020))
                                    {
                                        printf("Data actual invalida \n");
                                    }
                                    else
                                    {
                                        if ((ano < ano_do_nascimento) ||
                                            (dia < dia_do_nascimento && ano_do_nascimento == ano))
                                        {
                                            printf("Data actual inferior a data de nascimento");
                                        }
                                        else
                                        {
                                            if (carater == 'a')
                                            {
                                                calcula_idade = 365 * ano + 30 * mes + dia -
                                                    365 * ano_do_nascimento -
                                                    30 * mes_do_nascimento -
                                                    dia_do_nascimento;
                                                ano1 = calcula_idade / 365;
                                                calcula_idade = calcula_idade % 365;
                                                mes1 = calcula_idade / 30;
                                                calcula_idade = calcula_idade % 30;
                                                dia1 = calcula_idade;
                                                printf("%d anos", ano1);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}
 

 

  • Obrigado 1
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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!