Прежде всего, короткое примечание о том, как работает scanf: всякий раз, когда вызывается scanf, он пропускает первые пробелы, считывает и сохраняет символы до тех пор, пока снова не встретит пробел (и «пробел» - это символ пробела).Как только он встречает символ пробела, он возвращается и учитывает оставшиеся символы при повторном вызове.
Теперь, глядя на вашу программу, я предполагаю, что ID не содержит пробелов, поэтому он используется scanfполностью, но когда ваши программы готовы принять имя и сказать, что вы вводите "Джеймс Бонд".Эта строка содержит пробел, поэтому scanf сохраняет «James» в & aStudent.Name и возвращает.Как уже упоминалось, «Bond» сохраняется при следующем вызове scanf, поэтому & aStudent.Course получает возможность сохранить Bond.Таким образом, ваша программа никогда не получит шанс сохранить курс.Отсюда и результат.