Thread: program help

  1. #1
    Registered User
    Join Date
    Oct 2011
    Posts
    7

    program help

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

  2. #2
    Gawking at stupidity
    Join Date
    Jul 2004
    Location
    Oregon, USA
    Posts
    3,218
    An easy way is with a loop:
    Code:
    int date_is_bad;
    do
    {
      date_is_bad = 0;
      printf("Enter a date (mm/dd/yyyy): ");
      scanf("%d/%d/%d", &month, &day, &year);
    
      if(month < 1 || month > 12)
        date_is_bad = 1;
      else
      {
        switch(month)
        {
          ...
        }
      }
    
      if(date_is_bad)
        puts("An invalid date was entered. Please try again.");
    } while(date_is_bad);
    If you understand what you're doing, you're not learning anything.

  3. #3
    Registered User
    Join Date
    Nov 2011
    Location
    Saratoga, California, USA
    Posts
    334
    That's because you reprompt and read a new date, possibly introducing a new error, in the middle of your testing logic. You need to start at the top of your validation for every new date read in.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Replies: 1
    Last Post: 03-03-2009, 04:47 PM
  2. Replies: 5
    Last Post: 08-16-2007, 11:43 PM
  3. Replies: 18
    Last Post: 11-13-2006, 01:11 PM
  4. making a program leave a msg for background program when it closes
    By superflygizmo in forum Windows Programming
    Replies: 2
    Last Post: 02-06-2006, 07:44 PM
  5. How To Make The Program Installed In Program Files Folder?
    By javacvb in forum Windows Programming
    Replies: 4
    Last Post: 11-05-2003, 05:33 PM