Hi,

I made a simple function that gets and prints tomorrow's date but it doesn't work.
It works only if I switch all "unsigned short" to regular "int".

I think there's a problem with getting variables from "scanf". (I tried to change %d to %lu in scanf sentence but it's not working either.)

Can anyone explain why its working only with int and how I can make it working with unsigned short?


Code:
#include <stdio.h>

void printTomorrow(unsigned short month, unsigned short day, unsigned short year);
bool isLeapYear(unsigned short year); //check if it's a leap year

void main(void)
{
	unsigned short month, day, year;

	printf("Input the date of which you want to know tomorrow\n");
	printf(">> ");
	scanf("%d %d %d", &month, &day, &year); //I inputed "7 31 2008"

	printf("year: %d   month: %d   day; %d\n", year, month, day); //check if all variables are inputed correctly. it doesn't. only variable "year" has right one, rest of them has 0.
	printTomorrow(month, day, year);
}

void printTomorrow(unsigned short month, unsigned short day, unsigned short year)
{
	static unsigned short lastDay[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	if(isLeapYear(year)){	//if inputed year is leap
		lastDay[2]=29;	//change Febrary's last day
	}

	if(month<1 || month>12 || day<1 || day>lastDay[month]) //error check
		fprintf(stderr, "printTomorrow:: Incorrect date!\n");
	else{
		day++;
		if(lastDay[month]<day){ //in case that inputed day is the last day of the month.
			day=1;
			month++;
			if(month == 13){ //in case that inputed date is the last day of the year.
				month=1;
				year++;
			}
		}
		printf("Tomorrow:: %d-%d-%d\n",month, day, year);
	}
}

bool isLeapYear(unsigned short year)
{
	if(year%400 == 0)
		return 1;
	else if(year%4 ==0 && year%100!=0)
		return 1;
	else
		return 0;
}