В этом выражении
students[n].name = name;
элемент данных name
всех элементов массива студентов получает один и тот же адрес локальной переменной name
.
Вам необходимо объявить член данных name
структуры как массив символов и использовать либо стандартную функцию C strcpy
, либо strncpy
, чтобы скопировать содержимое локальной переменной name
в элемент данных name
.
Например,
#define N 30
struct student
{
char name[N];
int reg_no;
};
typedef struct student student;
int main( void )
{
char choice = 'y';
char name[N];
//…
Обратите внимание, что функция gets
является небезопасной функцией и не поддерживается стандартом C. Вместо этого используйте стандартную C функцию fgets
.
Например
#include <string.h>
//…
fgets( name, sizeof( name ), stdin );
name[strcspn( name, "\n" )] = '\0';
//…
strcpy( students[n].name, name );