Ir ao conteúdo
  • Cadastre-se
Marco Skater

Linguagem c

Recommended Posts

Alguém me ajuda, por favor. O professor pediu para entregar para hoje um programa que recebe uma data e verifica se ela é válida ou não, consegui fazer o programa, ele até compila, mas se o mês for < que 0 e mês > 12, ele dá como data válida, como arrumaria isso? Valeu

 

 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
int main(){
   system("Color F0");{
      setlocale (LC_ALL,"Portuguese");    
      int d, m, a, resto;
      printf("**********> DIGITE A DATA <**********\n\n");
      printf("Dia = ");
      scanf("%d", &d);
      printf("Mês = "); 
      scanf("%d", &m); 
      printf("Ano = ");
      scanf("%d", &a);
      if (m==2){
         resto=a%4;
         if (resto==0){
             if (d>0 && d<30){
                printf ("\n>>> Data válida <<<");
             } else {
                 printf ("\n>>> Data inválida <<<");
            }} else {
                if (d>0 && d<29){
                    printf ("\n>>> Data válida <<<");
                } else {
                    printf ("\n>>> Data inválida <<<");
                }
            }
        } else {
            if (m==4 || m==6 || m==9 || m==11){
                if (d>0 && d<31){
                    printf ("\n>>> Data válida <<<");
                } else {
                    printf ("\n>>> Data inválida <<<");
                }
            } else {
                if (d>0 && d<32){
                    printf ("\n>>> Data válida <<<");
                } else {
                    printf ("\n>>> Data inválida <<<");
                    getch();
                }
            }
        }
    }
}
              
         

 

 

 

Editado por Marco Skater

Compartilhar este post


Link para o post
Compartilhar em outros sites

seu problema do mês ocorre porque em nenhum lugar você disse para o programa não aceitar números abaixo de 0 ou acima de 12.

 

Seu programa começa testando o mês 2, verificando se é bissexto ou não.

Depois ele testa os meses com 30 dias. Até aí parece tudo bem (não testei aqui).

O problema é que se o mês não se encaixa nos meses acima, ele passa direto para os demais meses (que seriam os de 31 dias) mas como você não usou nenhum condicional, ele está aceitando qualquer mês.

 

 

Obs: use tag code para melhor visualização do código.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha eu fiz assim agora a parte de interface com o usuario você melhora ai;

 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
typedef struct {
	char mes[15];
}mes;
int main(){
	mes M[12] = {"Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"};
   system("Color F0");
   
   	
      setlocale (LC_ALL,"Portuguese");  
	    
      int d, m, a;
      printf("**********> DIGITE A DATA <**********\n\n");
      printf("Dia = ");
      scanf("%d", &d);
      printf("Mês = "); 
      scanf("%d", &m); 
      printf("Ano = ");
      scanf("%d", &a);
      
      if(d <= 0 || d > 31 || m <= 0 || m > 12 || a <=0)
      {
      	printf("\nData Inválida");
	  }
	  else
	  {
	  	printf("\n Data Válida");
	  	printf("\n %i de ",d);
	  	printf("%s de ",M[m - 1].mes);
	  	printf("%i",a);
	  	
	  }
      
	 return 0;
}

 

Editado por Xandrules

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×