Calendar Problem

• 10-27-2002
wordup
Calendar Problem
I have to write a function which takes in a year between 1900 and 1999 and returns as a number the first day of that year. Days of the week go from 0 - 6 ( Sunday = 0, Saturday = 6).

I am supposed to use a leap year test to make this function work. I am also meant to make use of the fact that 1/1/1900 was a Monday. At the moment the program returns the correct value for the year 1900, but for every other year i enter i get "9" which is an invalid value. Any help??

Here is my code so far:

Code:

```# include <stdio.h> int new_years_day(int day, int year); int no_of_days(int months, int year); int first_day(int day, int year, int months); int main(void) {         int choice, day = 0, months = 0, year = 0;         printf("Choose a function\n (1) new_years_day (2) no_of_days (3) first_day >> ");         scanf("%d", &choice);         if (choice == 1)                 new_years_day(day, year);                 else if (choice == 2)                         no_of_days(months, year);                         else if (choice == 3)                                 first_day(day, year, months);                                 else                                 {                                         printf("\nPlease enter a number between 1 and 3 >> ");                                         scanf("%d", &choice);                                 }                                         return 0; } int new_years_day(int day, int year) {         int i = 0, leap = 0;         // ask user for year between 1900 and 1999         printf("Enter a year between 1900 and 1999 >> ");         scanf("%d", &year);         // check that user enters a valid year         while (year < 1900 || year > 1999)         {                 // print error message                 printf("You can only choose a year between 1900 and 1999!! >> ");                 scanf("%d", &year);         }                 for ( i = day; day <= 6; day++)                 /* Problem: need to count no. of years after 1900 and loop between 0 and 6           the right number of times to get the right day */                         // leap year check         while ((year % 400 == 0) && (year % 4 == 0) && (year % 100 > 0))                                leap = 1;                // is a leap year                         // find correct day                 if (year == 1900)                 {                         day = 1;                         printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);                 }                 else if (leap = 1)                 {                         day = day + 2;                         printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);                 }                 else if (leap = 0)                 {                         day++;                         printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);                 }                 return year, day; } int no_of_days(int months, int year) {         int i, current, leap = 0;         // ask user for year between 1900 and 1999         printf("Enter a year between 1900 and 1999 >> ");         scanf("%d", &year);                 // check that user enters a valid year         while (year < 1900 || year > 1999)         {                 // print error message                 printf("You can only choose a year between 1900 and 1999!! >> ");                 scanf("%d", &year);         }         // ask user for a month between 1 and 12         printf("Enter a month between 1 and 12 >> ");         scanf("%d", &months);         // check that user enters a valid month         while (months < 1 || months > 12)         {                 // print error message                 printf("You can only choose a month between 1 and 12!! >> ");                 scanf("%d", &months);         }         return months, year; } int first_day(int day, int year, int months) {         int i, current, leap = 0;         // ask user for year between 1900 and 1999         printf("Enter a year between 1900 and 1999 >> ");         scanf("%d", &year);                 // check that user enters a valid year         while (year < 1900 || year > 1999)         {                 // print error message                 printf("You can only choose a year between 1900 and 1999!! >> ");                 scanf("%d", &year);         }         // ask user for a month between 1 and 12         printf("Enter a month between 1 and 12 >> ");         scanf("%d", &months);         // check that user enters a valid month         while (months <1 || months >12)         {                 // print error message                 printf("You can only choose a month between 1 and 12!! >> ");                 scanf("%d", &months);         }                 return day, year, months; }```
• 10-27-2002
The Dog
Firstly, you cannot return multiple values from functions. You only have one function that does something, namely new_years_day. The other two functions just accept user-input but they don't do anything.
• 10-27-2002
wordup
Sorry bout the confusion but the other 2 functions are meant to be there cos i still have to build them yet. It's just that i'm stuck on the 1st function (new_years_day). Should I just have (return 0) at the bottom then instead of (return year, day), for example ??
• 10-27-2002
The Dog
Declare the function like this :
void new_years_day(int day, int year);

then you don't have to return anything.
• 10-27-2002
wordup
Ok, thanks. So anybody got any ideas as to how i can make this function work then?

Code:

```void new_years_day(int day, int year) {         int i = 0, leap = 0;         // ask user for year between 1900 and 1999         printf("Enter a year between 1900 and 1999 >> ");         scanf("%d", &year);         // check that user enters a valid year         while (year < 1900 || year > 1999)         {                 // print error message                 printf("You can only choose a year between 1900 and 1999!! >> ");                 scanf("%d", &year);         }                 for ( i = day; day <= 6; day++)                 /* Problem: need to count no. of years after 1900 and loop between 0 and 6           the right number of times to get the right day */                         // leap year check         while ((year % 400 == 0) && (year % 4 == 0) && (year % 100 > 0))                                leap = 1;                // is a leap year                         // find correct day                 if (year == 1900)                 {                         day = 1;                         printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);                 }                 else if (leap = 1)                 {                         day = day + 2;                         printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);                 }                 else if (leap = 0)                 {                         day++;                         printf("\nThe first day of the year in %d was a %d (0 - Sunday, 6 - Saturday)\n", year, day);                 }         }```
• 10-29-2002
wordup