C Program to check whether a date is valid or not
Last updated on September 24, 2020
The following is a C program to check whether the entered date is valid or not.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | /************************************************
Program to check whether a date is valid or not
*
* Enter a date (MM/DD/YYYY) :05/30/2002
* Date is valid.
*
* Enter a date (MM/DD/YYYY) :02/29/2001
* Date is invalid.
*************************************************/
#include<stdio.h> // include stdio.h library
int main(void)
{
int day, mon, year, is_leap = 0, is_valid = 1;
printf("Enter a date (MM/DD/YYYY) :");
scanf("%d/%d/%d", &mon, &day, &year);
if (year >= 1800 && year <= 9999)
{
// check whether year is a leap year
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
is_leap = 1;
}
// check whether mon is between 1 and 12
if(mon >= 1 && mon <= 12)
{
// check for days in feb
if (mon == 2)
{
if (is_leap && day == 29)
{
is_valid = 1;
}
else if (day > 28)
{
is_valid = 0;
}
}
// check for days in April, June, September and November
else if (mon == 4 || mon == 6 || mon == 9 || mon == 11)
{
if (day > 30)
{
is_valid = 0;
}
}
// check for days in rest of the months
// i.e Jan, Mar, May, July, Aug, Oct, Dec
else if(day > 31)
{
is_valid = 0;
}
}
else
{
is_valid = 0;
}
}
else
{
is_valid = 0;
}
if(is_valid)
{
printf("Date is valid.");
}
else
{
printf("Date is invalid.");
}
return 0; // return 0 to operating system
}
|
Expected Output: 1st run:
1 2 | Enter a date (MM/DD/YYYY) :05/25/2012
Date is valid.
|
2nd run:
1 2 | Enter a date (MM/DD/YYYY) :02/29/2001
Date is invalid.
|
How it works #
Here are the steps to check whether a date is valid or not.
- In line 20, we check whether the entered year is between
1800and9999. If the condition is false, the control jumps to the else clause in line 68 and we set the value ofis_validto0. - Otherwise, if the condition
(year >= 1800 && year <= 9999)is true, the control jumps to body of the if statement. - In line 24, we test whether the year is a leap year or not. If the year is a leap year, we set
is_leapto1. - In line 30, we test whether the month is between 1 and 12. If the condition is false, the control jumps to the else clause defined in line 62 and we set the value of
is_validto0. - Otherwise, if the condition
mon >= 1 && mon <= 12is true, the control comes to the nested if-else statement defined in lines 33-59. - In line 33, we check for invalid days in the month of February.
- In line 46, we check for invalid days in the month of April, June, September and November.
- In line 56, we check for invalid days in Jan, Mar, May, July, Aug, Oct and Dec.
- Finally, in line 73, we check the value of
is_validvariable to determine whether the date is valid or not.
Recommended Reading:
- C Program to calculate the power of a number
- C Program to print the two digit number in words
- C Program to simulate a simple calculator using switch statement
- C Program to find the roots of a Quadratic equation
- C Program to check whether the number is a Palindrome
Load Comments