I have to write a program that will read in a date in this format (mm/dd/yyyy) and it should output it like this: January 1, 2001. i have most of it done but if i put in a correct month and wrong day it will ask again but it will not detect if there is an incorrect month. How do i get the program to go through all the error checks in the program after i have an incorrect input?
Code:
#include <stdio.h>
int main(void)
{
int month, day, year;
char * date[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
printf("Enter a date (mm/dd/yyyy): ");
scanf("%d/%d/%d", &month, &day, &year);
if (month <= 0 || month > 12)
{
while(month < 0 || month > 12){
printf("You entered an invalid date. Please try again.\n");
printf("\nEnter a date (mm/dd/yyyy): ");
scanf("%d/%d/%d", &month, &day, &year);}
}else switch (month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if (day < 1 || day > 31)
{
while(day < 1 || day >31){
printf("An invalid day was entered. Please try again.\n");
printf("\nEnter a date (mm/dd/yyyy): ");
scanf("%d/%d/%d", &month, &day, &year);}
}
break;
case 4: case 6: case 9: case 11:
if (day < 1 || day > 30)
{
while(day < 1 || day > 30){
printf("An invalid day was entered. Please try again.\n");
printf("\nEnter a date (mm/dd/yyyy): ");
scanf("%d/%d/%d", &month, &day, &year);}
}
break;
case 2:
if(year % 400 == 0 || (year % 100 != 0 && year%4 == 0))
{
if (day < 1 || day > 29)
{
while( day < 1 || day > 29){
printf("An invalid date was entered. Please try again");
printf("\nEnter a date (mm/dd/yyyy): ");
scanf("%d/%d/%d", &month, &day, &year);}
}
} else if (day < 1 || day > 28)
{
while(day < 1 || day > 28){
printf("An invalid date was entered. Please try again.");
printf("\nEnter a date (mm/dd/yyyy): ");
scanf("%d/%d/%d", &month, &day, &year);}
}
break;}
printf("You entered the date %s %d, %d", date[month-1], day, year);
return 0;
}