Hey guys sorry for posting the whole code again..
How i can get my calenda program working from here? Because its not printing anything its only printing the mon tu wed etc but not the days of the month 1 - 31 and im not sure if its worked out correctly where the month starts?
Someone plz help me?
int main(void)
{
unsigned month;
unsigned year;
unsigned long days = 0;
int i;
int *keeptrack;
int daysOfMonth[MAX_MONTH] ={31,28,31,30,31,30,31,31,30,31,30,31};
/* that prints array
for(i=0; i<MAX_MONTH; i++)
{
printf("days array:%d\n", daysOfMonth[MAX_MONTH]);
}*/
month = getMonth();
year = getYear();
if(isLeapYear(year))
{
daysOfMonth[1] = 29; /* change feb to 29 days*/
}
displayCalendar(month, year, daysOfMonth, keeptrack);
return EXIT_SUCCESS;
}
/***********************************track,********* ********************************
* Function getMonth() prompt the user for a number MIN_MONTH to MAX_MONTH and
* returns that number. The number 0 is valid because this indicates that the
* user wants to select all months.
************************************************** **************************/
unsigned getMonth()
{
/*** declare variables*/
char *prompt = "Please enter a month between 0 - 12 !\n";
char *month;
int valMonth;
int monthValid;
do
{
monthValid = TRUE;
month = getUserInput(prompt);
valMonth = strtod(month,NULL);
monthValid = validateMonth(valMonth);
}
while(!monthValid);
/*printf("hello %s",month)void ;*/
/*printf("Please enter a month between 0 - 12\n");*/
/* validation check if month entered is less then 0 > 12*/
/*doint arr[] = {1,2,3};
{
fgets(buff, BUFF_SIZE, stdin);
*month = atoi(buff);
while(flag == 1 || *month <0 || *month >12)
{
flag = 0;
printf("Wrong input for month from 0 - 12 only!\n");
printf("Please enter a month between 0 - 12\n");
MAX_MONTHfgets(buff, BUFF_SIZE, stdin);
*month = atoi(buff); month = getUserInput(prompt, result);
tmpMonth = validateMonth(vvoid alMonth, prompt, result);
}
month
MAX_MONTH
}
while(flag != 0 );
*/
/* printf(" value of month is:%d", valMonth) ; */
return valMonth;
}
/************************************************** **************************
* Function MAX_MONTHgetYear() prompts the user for a number MIN_YEAR to MAX_YEAR and
* returns that number.
************************************************** **************************/
unsigned getYear(char *month)
{
char *prompt = "Please enter the year\n";
char *year;
int valYear;
int yearValid;
do
{
year = getUserInput(prompt);
valYear = strtod(year,NULL);
yearValid = validateYear(valYear);
}
while(!yearValid);
return valYear;
}
/************************************************** **************************
* Function displayCalendar() displays the calendar for the user.
* The function will display the calendar for a whole month.
* If the user supplied a month of "0", then a calendar for a whole year
* is displayed instead each month displayed under the previous one (you
* don't need to try to display months side by side).
* Give attention to getting the output format exactly as shown below
* (including headings and avoid lignment). Here's an example for March 2006:
* --------------------
* March 2006
* S M Tu W Th F S
* 1 2 3 4
* 5 6 7 8 9 10 11
* 12 13 14 15 16 17 18
* 19 20 21 22 23 24 25
* 26 27 28 29 30 31
*
************************************************** **************************/
void displayCalendar(unsigned month, unsigned year, int ar[], int *track)
{
/* function called totalDays();*/
/* total days % 7 finds out how many spaces for each month*/
/* figure out when to prvoid int a new line*/
int i;
int dt;
int loop;
int t;
t=*track;
totalDays(month, year, ar, t);
printf("\n\n\n\n\t\t");
printf("S M Tu W Th F S\n");
printf("%d", t);
for(loop=0; loop<t+2; loop++)
{
printf("\t");
for(dt=1; dt<=month; dt++)
{
if(t%7==0 && t!=0)
{
printf("\n\n\t\t");
printf("%d\t", dt);
t++;
}
}
}
}
/************************************************** **************************
* Function readRestOfLine() is used for buffer clearing. Source:
* https://inside.cs.rmit.edu.atrack,u/~sdb/teaching/C-Prog/CourseDocuments/
* FrequentlyAskedQuestions/
***************************void *************************************************/
void readRestOfLine()
{
int c;
/* Read until the end of the line or end-of-file. */
while ((c = fgetc(stdin)) != '\n' && c != EOF);
/* Clear the error and end-of-file flags. */
clearerr(stdin);
}
char* getUserInput(char *prompt)
{
char *result;
char buff[BUFF_SIZE];
printf(prompt);
result = fgets(buff, BUFF_SIZE, stdin);
if(result == NULL)
{
printf("Error please enter the input again!\n");
}
else if(result[strlen(result)-1] != '\n')
{
readRestOfLine();
}
return result;
}
int validateMonth(unsigned month)
{
if(month<0 || month>12) /* flag 1 for true*/
{
printf("Month error 0 or less or equal to 12 please\n");
return FALSE;
}
return TRUE;
/*return 1;*/
}
int validateYear(unsigned year)
{
if(year<0 || year>3000)
{
printf("between 0 - 3000 only!!\n");
return FALSE;
}
return TRUE;
}
int isLeapYear(unsigned year)
{
/* year = 2006; test for leap year*/
if((year%400 == 0)|| ( year%4==0 && year % 100 != 0))
{
printf("leap year\n");
return TRUE;
}
else
{
return FALSE;
}
/* return year;*/
}
void totalDays(unsigned month, unsigned year, int ar[], int track)
{
int i;
int md = 0;
int leap=0;
int startYear = 1900;
unsigned d;
unsigned yrd;
for(i=startYear; i<year; i++)
{
if((i%4==0)&&((i%100!=0)||(i%400==0)))
{
leap++;
}
}
for(i=0; i<(month-1)&&(i<11); i++)
{
md = md+ar[i];
yrd=(year-startYear)*365;
d = yrd+leap+md;
track=d%7;
}
/*printf("Month day:%d.yearDay1900:%d...
day:%d..track%d", md, yrd,d,track);*/
}