Ir ao conteúdo

C validar o mes de fevereio


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

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

Postado

@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 .

Postado

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

 

Postado

@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

  • Solução
Postado

@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

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