Поскольку вы не отправляли какие-либо данные, мне нужно было выяснить это самостоятельно, просто включите ввод и вывод дискретизации в следующий раз:
1
1
name
Посмотрим, что ваша программа делает с stdin в этот момент
scanf("%d",&choice); // in menu() in loop, choice := 1, ie add book
scanf("%d",&n); // in addbook(), n := 1, ie. 1 book
gets(str[bookcount].name); // in addbook in loop, this will be and should be ""
scanf () "потребляют и отбрасывают все ведущие символы пробела", а символ новой строки - символ пробела . Так вот что происходит:
scanf("%d",&choice); // reads '1' from the input, and stops BEFORE newline
scanf("%d",&n); // discards newline and reads 1 from the input and stops before newline
gets(str[bookcount].name); // because newline is still in buffer and gets
// stops at first newline, this will read empty string
// the next gets will read the `name` from stdin, as it wasn't read already
Исправление довольно простое. Просто scanf для строк scanf("%d\n",...);
не для отдельных переменных.
Как уже упоминалось в комментариях, вам не нужно расширение «Только подсветка синтаксиса», если у вас есть Dart, так как Dart включает ту же подсветку синтаксиса.
Судя по вашему скриншоту, кажется, что подсветка синтаксиса работает нормально - я вижу несколько цветов. Я думаю, что проблема, вероятно, тема VS Code, которую вы используете. Dark (Visual Studio) показывает только ограниченные цвета - попробуйте изменить его на Dark + , и вы должны увидеть больше цветов.
Dark
Dark +