It might look something like this:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int is_valid ( int m, int d, int y )
{
static const int mday[] = {
0,31,28,31,30,31,30,31,31,30,31,30,31
};
if ( m <= 0 || m > 12 )
return 0;
else if ( d <= 0 || d > mday[m] )
return 0;
else if ( y < 1900 || y > 3000 ) /* Arbitrary choices */
return 0;
return 1;
}
int main ( void )
{
char s[20];
int date[3];
if ( fgets ( s, sizeof s, stdin ) != NULL ) {
char *t, *end;
int i;
/* Remove newline */
s[strcspn ( s, "\n" )] = '\0';
t = strtok ( s, "/" );
for ( i = 0; i < 3 && t != NULL; i++ ) {
date[i] = strtol ( t, &end, 0 );
if ( date[i] == 0 && *end != '\0' ) {
fprintf ( stderr, "Invalid format\n" );
return EXIT_FAILURE;
}
t = strtok ( NULL, "/" );
}
if ( i != 3 )
printf ( "Invalid format\n" );
else if ( is_valid ( date[0], date[1], date[2] ) )
printf ( "%d/%d/%d is valid\n", date[0], date[1], date[2] );
else
printf ( "Invalid date\n" );
}
}