Ir ao conteúdo
  • Cadastre-se

Linguagem c


Posts recomendados

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

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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.

 

Link para o comentário
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;
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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