mardi 22 septembre 2015

Why is my program adding an extra day to a non leap year?

This is my program where I find the day of the year based on a date put in. I also have to take into account for leap years. I have all that but when a year put in such as 12/31/1993 is put in, I get the day as 366 which is incorrect because it's not a leap year so the day of the year should be 365. I've tested whether it's my if statement by just giving the program the ability to only test for leap years and to close out if its a non leap year. When the same date was entered, the program closed out telling me that the problem doesn't lie in my if statement but in my case and switches. I'm not really sure as to what's happening or why its adding the extra day to the date.

#include <stdio.h>

int main(void){

    int month,day,year,day_number=0;

    printf("Enter a date in the form (01/02/1996): ");
    scanf("%d/%d/%d", &month,&day,&year);


    if(((year%4 == 0) && (year%100 !=0)) || (year%400==0)){
        goto two;
    }
    else{
        month=month;
        goto one;
    }

    one:
        switch(month)
        {
            case 1:day_number=day;
                break;
            case 2:day_number=31+day; //January+Febuary
                break;
            case 3:day_number=59+day; //January+Febuary+March
                break;
            case 4:day_number=90+day; //January+Febuary+March+April
                break;
            case 5:day_number=120+day; //January+Febuary+March+April+May
                break;
            case 6:day_number=151+day; //January+Febuary+March+April+May+June
                break;
            case 7:day_number=181+day; //January+Febuary+March+April+May+June+July
                break;
            case 8:day_number=212+day; //January+Febuary+March+April+May+June+July+August
                break;
            case 9:day_number=243+day; //January+Febuary+March+April+May+June+July+August+September
                break;
            case 10:day_number=273+day; //January+Febuary+March+April+May+June+July+August+September+October
                break;
            case 11:day_number=304+day; //January+Febuary+March+April+May+June+July+August+September+October+November
                break;
            case 12:day_number=334+day; //January+Febuary+March+April+May+June+July+August+September+October+November+December
                break;
        }
    two:
        switch(month)
        {
            case 1:day_number=day;
                break;
            case 2:day_number=31+day; //January+Febuary
                break;
            case 3:day_number=60+day; //January+Febuary+March
                break;
            case 4:day_number=91+day; //January+Febuary+March+April
                break;
            case 5:day_number=121+day; //January+Febuary+March+April+May
                break;
            case 6:day_number=151+day; //January+Febuary+March+April+May+June
                break;
            case 7:day_number=182+day; //January+Febuary+March+April+May+June+July
                break;
            case 8:day_number=213+day; //January+Febuary+March+April+May+June+July+August
                break;
            case 9:day_number=243+day; //January+Febuary+March+April+May+June+July+August+September
                break;
            case 10:day_number=274+day; //January+Febuary+March+April+May+June+July+August+September+October
                break;
            case 11:day_number=304+day; //January+Febuary+March+April+May+June+July+August+September+October+November
                break;
            case 12:day_number=335+day; //January+Febuary+March+April+May+June+July+August+September+October+November+December
                break;
        }
    printf("day %d\n", day_number);

        return 0;
}

Aucun commentaire:

Enregistrer un commentaire