Проблемы с чтением строки в си

Не могу понять, почему не запрашивается ввод в gets. Когда дебажу код, то в строке gets считывается пустая строка. Если я выношу этот ввод в функцию main, то всё работает исправно.

#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <windows.h>

struct Book {
    char* authorBook;
};

void createBook(struct Book* books, int* N) {

// ТАКОЙ КОД НЕ ЗАПРАШИВАЕТ ВВОД И ЗАПИСЫВАЕТ В СТРОКУ ПУСТОЕ ЗНАЧЕНИЕ
    printf("Фамилия автора: ");
    (books[*N]).authorBook = (char*)malloc(sizeof(char) * 64);
    gets(books[*N].authorBook);
    puts(books[*N].authorBook);
    (*N)++;
}

void main() {
    setlocale(LC_ALL, "rus");

    struct Book* books;
    int N = 0;

    // Всё работает верно, если так.
    /*(books[N]).authorBook = (char*)malloc(sizeof(char) * 64);
    gets(books[N].authorBook);
    puts(books[N].authorBook);*/

    do {
        int answer;
        printf("Это библиотека. Выберите нужную для вас команду: \n");
        printf("1. Внесение в реестр новой книги.\n");
        printf("Введите ваш ответ: ");
        scanf_s("%d", &answer);
        switch (answer) {
            case 1: {
                books = (struct Book*)malloc(sizeof(struct Book));
                createBook(books, &N);
                break;
            }
        }
    } while (1);

    getchar();
    getchar();
}

Ответы (0 шт):