Ir para conteúdo
Fórum Script Brasil
  • 0

Como valido a data?


bruce845

Pergunta

Bem, fiz esse programa em C que lê uma data.

#include <stdio.h>
#include <conio.h>
#include <string.h>

void main(void)
{
  short int dia,mes,ano;
  puts("Digite a data:");
  scanf("%hd%*c%hd%*c%hd",&dia,&mes,&ano);
  printf("%hd/%hd/%hd\n",dia,mes,ano);
  getch();
  return;
}

Só que se o usuário digitar outra coisa (ex.: kdasdas)

Como validar a data nesse caso?

Editado por bruce845
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Eu já tomaria uma abordagem diferente:

#include <stdio.h>

/* int ler_data(int* dia, int* mes, int* ano);
   Le uma data nas variaveis dia, mes, ano
   Se a função retornar 0, os valores dia, mes, ano são numéricos e estão com os valores inseridos pelo usuário
   Se a função retornar 1, ocorreu um erro de leitura e as variáveis dia, mes, ano podem conter lixo!
*/
int ler_data(int* dia, int* mes, int* ano) {
  char input[1024];
  int valida;

  fgets(input, 1024, stdin);
  valida = sscanf(input, "%d/%d/%d\n", dia, mes, ano);

  return (valida == 3) ? 0 : 1; 
}

/* int valida_data(int dia, int mes, int ano);
   Valida os valores dia, mes e ano
   Se a função retornar 0, todos os valores foram validados
   Se a função retornar 1, ocorreu um problema de validação com o dia (isso não garante que o mês e o ano estejam corretos!)
   Se a função retornar 2, ocorreu um problema de validação com o mês (isso não garante que o ano esteja correto!)
   Se a função retornar 3, ocorreu um problema de validação com o ano
*/
int validar_data(int dia, int mes, int ano) {
  if(dia > 31 || dia < 1) {
    return 1;
  }

  if(mes > 12 || mes < 1) {
    return 2;
  }

  if(ano < 1) {
    return 3;
  }

  return 0;
}

int main(void) {
  int dia, mes, ano;

  while(ler_data(&dia, &mes, &ano) || validar_data(dia, mes, ano));

  printf("%d/%d/%d\n", dia, mes, ano);
  return 0;
}

Ele irá ficar pedindo uma data até o usuário inserir uma correta. (1-31/1-12/1-infinito)

Abraços!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...