Sorry guys i apologize for posting large code but im trying to pass the
int daysOfMonth[] = {31,28,31,30,31,30,31,31,30,31,30,31} variable array to the totalDays function so i can do some calculations. But i keep getting a seg fault.
int main(void)
{
unsigned month;
unsigned year;
unsigned long days = 0;
int i;
int daysOfMonth[] = {31,28,31,30,31,30,31,31,30,31,30,31};
month = getMonth();
year = getYear();
/*displayCalendar(month, year);*/
/* function call : if its a leap year february is now 29 days instead 28*/
if(isLeapYear(year))
{
daysOfMonth[1] = 29; /* change feb to 29 days*/
}
displayCalendar(month, year, daysOfMonth[]);
return EXIT_SUCCESS;
}
/****************************************************************************
* 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");
fgets(buff, BUFF_SIZE, stdin);
*month = atoi(buff); month = getUserInput(prompt, result);
tmpMonth = validateMonth(vvoid alMonth, prompt, result);
}
month
}
while(flag != 0 );
*/
/* printf(" value of month is:%d", valMonth) ; */
return valMonth;
}
/****************************************************************************
* Function getYear() 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* daysOfMonth[])
{
/* 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;
printf("S M Tu W Th F S\n");
totalDays(month, year, daysOfMonth);
}
/****************************************************************************
* Function readRestOfLine() is used for buffer clearing. Source:
* https://inside.cs.rmit.edu.au/~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;*/
}
int totalDays(unsigned month, unsigned year, int *daysOfMonth[])
{
/*
int i, md=0, leap=0, track, Y;
unsigned int d, yrd;
printf("size of array is%d\n",daysOfMonth[i]);
for(i=Y; 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+daysOfMonth[i]; */
return EXIT_SUCCESS;
}