so I want to create an address book program and I have this following code :
#define MAX_VALUE_FOR_ARRAYS 1000
int i = 0 ;
int answer = 0 ;
int number_of_people = 0 ;
FILE* address_book = NULL ;
address_book = fopen("addressBook.txt", "w")  ;
typedef struct People People ;
struct People
{
    char f_name[MAX_VALUE_FOR_ARRAYS]
};
People *persons = NULL ;
printf("A D D R R E S S  B O O K \n\n\n") ;
printf("1. Add a new contact \n") ;
printf("2. View all contacts \n") ;
printf("\nMake your choice : ") ;
while (answer < 1 || answer > 2)
{
    printf("\nWrong input, try again ! : ") ;
    scanf("%d", &answer) ;
}
if (answer == 1)
{
    printf("How many contacts do you want to add ? : ") ;
    scanf("%d", &number_of_people) ;
    persons = malloc(number_of_people * sizeof(People) ) ;
    if (persons == NULL)
    {
        printf("\nMemory allocation failed !") ;
    }
    for (i = 0; i < number_of_people; i++)
    {
        printf("Person %d ", (i+1)) ;
        printf("Enter the first name : ") ;
        fgets(persons[i].f_name, MAX_VALUE_FOR_ARRAYS, stdin) ;
        if (address_book == NULL)
        {
        printf("\nFailed to open file ! ") ;
        }
    fputs(persons[i].f_name, address_book) ;
    fputc('\n', address_book) ;
    }
}
My problem is that the program doesn't want to store the first name ( the "fgets" calling line). It diplays what is in the printf("Enter you first name : ") ; And ignores the following line ( fgets(persons[i].f_name..) , After that it goes directly to the end of the program Help please
 
    