Си. Как правильно вынести код ввода в отдельную функцию?

Как вынести код введения имени, фамилии... в отдельную функцию. При этом надо выделять память под строку. (В функцию передаётся структура из массива структур и для каждой структуры нужно заполнить имя, фамилия, отчество и всё с выделением памяти и проверкой на ввод)

void getFullName(struct student* s)
{
  bool req = 0;
  int length;
  printf("Введите имя: ");
do
{
    rewind(stdin);
    (*s).name = (char*)malloc(LEN * sizeof(char));
    req = 0;
    fgets((*s).name, LEN, stdin); //Ввод имени
    if (((s->name[0]) == '\n') || (s->name[0]) == ' ')
    {
        req = 1;
        free((*s).name);
    }
    length = strlen((*s).name) - 1;
    (*s).name[length] = '\0';
} while (req); //ввод имени с проверкой

printf("Введите фамилию: ");
do
{
    rewind(stdin);
    (*s).lastName = (char*)malloc(LEN * sizeof(char));
    req = 0;
    fgets((*s).lastName, LEN, stdin); //Ввод имени
    if (((s->lastName[0]) == '\n') || (s->lastName[0]) == ' ')
    {
        req = 1;
        free((*s).lastName);
    }
    length = strlen((*s).lastName) - 1;
    (*s).lastName[length] = '\0';

} while (req); //фамилия

printf("Введите отчество: ");
do
{
    rewind(stdin);
    (*s).middleName = (char*)malloc(LEN * sizeof(char));
    req = 0;
    fgets((*s).middleName, LEN, stdin); //Ввод отчества
    if (((s->middleName[0]) == '\n') || (s->middleName[0]) == ' ')
    {
        req = 1;
        free((*s).middleName);
    }
    length = strlen((*s).middleName) - 1;
    (*s).middleName[length] = '\0';
} while (req); //отчество

}


Ответы (0 шт):