Проблемы с чтением строки в си
Не могу понять, почему не запрашивается ввод в 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();
}