scanf("%s", &student.name[i]);
Вы обращаетесь к единственной char
из строки, которую вы объявили.Я предполагаю, что вы хотели бы индивидуальный объект для каждого студента.Для этого я бы посоветовал определить ваш struct
следующим образом:
typedef struct students {
char name[20];
int score;
}Student;
С этим вы определили новый тип данных с именем Student
.Каждый объект типа Student
имеет строку с именем name
и int
, напоминающую счет.
После того, как вы создали эту модель, вы можете рассматривать ее как просто еще один тип переменной, например, следующее полностью допустимо:
Student student1, student2;
В качестве альтернативы, вы можете создать массив Student
s: Student group[20]
, а затем запустите цикл с данными:
for(int i = 0; i < n; i++){
puts("Name of the student: ");
fgets(group[i].name, 20, stdin);
puts("Score of the student: ");
scanf("%d", &group[i].score);
}
Сделка на одну итерацию для ссылки на отдельный объект массива студентов.Кроме того, я настоятельно рекомендую использовать fgets()
или как минимум gets_s()
для ввода строк.scanf()
имеет несколько проблем, некоторые из которых заключаются в том, что он останавливает ввод, если встречает пробел, табуляцию или символ новой строки, и, что наиболее важно, он не проверяет границы массива.Рассмотрите возможность использования более безопасного варианта, просто имейте в виду, что fgets()
добавляет '\n'
перед завершающим нулем.