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? Code: 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);*/ }
The problem is your strtod function return 0 and so all the values are being lost. Use atoi instead of that as that can help you towards success.