I tested your code with some fixes and it worked fine..

Fix 1 :while(1)
{
fflush(stdin);
printf("\n\tPress 1 - ADD New MEMBER\n\n");
printf("\tPress 2 - DELETE a MEMBER\n\n");
printf("\tPress 3 - VIEW All members\n\n");
printf("\tPress ctrl c - EXIT\n\n\n");
printf("You Entered --> : ");
scanf("%d",&op);
getchar()----> Add this as scanf inserts a \n in the buffer...Though you have used fflush(stdin)..the \n is not flushed as fflush doenot work with input streams
Ref: man fflush


Fix 2 : if(op == 1)
{ // read from keyboard
printf("\nEnter FULL NAME with _ for spaces AND(after a space) Today's date <dd/mm//yy>.\n");
fflush(stdin);
memset(members_init,0,sizeof(members_init); -----> Initiaze the buffer as it would copy Unwanted junk data to your buffer

Fix3: int load_members(struct members member[1000]) // loads ONLY NAME and JOINED DATE to structure
{
FILE *members;
char members_det[58];
memset(members_det,0,sizeof(members_det)); -----Same reason as fix 2...

When I ran on my system I got segfault n
strcpy((member[i].joined_date),temp_joined_date);----As Strcpy copies data upto Null character..
Hence the buffer needs to be initialsed so the it doesnt copy data untill null is found which was your case
jose_peeterson like this