¿Cómo uso una estructura?

Ok en primer lugar voy a explicar mi tarea. Para esta asignación, tengo que usar la asignación de memoria dinámica con la que no tengo problemas. Lo que tengo un problema con es averiguar la forma correcta de trabajar mi tarea. Para mi tarea, necesito crear un programa que solicite al usuario que ingrese la cantidad de alumnos que tienen y luego solicita la siguiente información; Identificación del estudiante, fecha de nacimiento y número de teléfono. Necesito usar un bucle para pedir al usuario que ingrese toda la información de los estudiantes. Necesito crear un bucle que escanee todas las identificaciones de los alumnos y encuentre al alumno de mayor edad utilizando su fecha de nacimiento (el bucle debe poder escanear más de 3 alumnos).

Aquí está mi código, recibí algunas sugerencias e incluso fragmentos de código de ustedes, pero después de implementarlos estoy aún más confundido sobre lo que debo hacer. Por favor échale un vistazo y critícame.

EDITAR: También he añadido en el código donde estoy recibiendo y error

Gracias.

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    int * studentData= NULL;
    int * studentDataType=NULL;
    int students;
    int studentID;
    int year;
    int month;
    int day;
    long long phone;

    printf("How many students are you entering records for:\n");
    scanf("%d", &students);

    studentData=(int*)malloc((sizeof(int)*students));

    struct studentDataType
    {
        int studentID; 
        int year;
        int month;
        int day;
        long long phone;
    };
    //invalid operands to binary * (have 'int' and 'int *')
    studentDataType *studentData = (studentDataType*)malloc(numberOfStudents *sizeof(studentData));

    for (int i = 0 ; i < students ; ++i) 
    {
        printf("%d, %d, %d, %d, %d\n", studentID, year, month, day, phone);
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta