cを習い始めてまだ一ヶ月ほどの者です。

学籍番号、身長、体重をメンバとしてもつstruct student_data を定義し、学生の情報を入力するとともに、身長、体重の最高値・最低値を学籍番号とともに表示するプログラムを作成する課題が出ています。なお、生徒の最大数は 10とし、学籍番号として負の数が入力されたら入力を終了する というものです。課題について、ヒントをください。

以下のコードは書き途中コードなのですが長ったらしくて汚いうえに構造体の使い方も間違っているみたいです。

ポインタも構造体も習ったばかりで、何が間違っているかも分からないほどなので読みにくいかと思いますがご教授いただけましたらありがたいです。

#include <stdio.h>

struct student_data{
  int num, h, w;
};

int main(){
  struct student_data *p[10];
  int i, a=0, b=0, c=0, d=0;
  printf("Input student number, height, weight:");
  for(i=0;;i++){
    scanf("%d %d %d", p[i]->num, p[i]->h, p[i]->w);
    if(p[i]->num<0){
      break;
    }else if(i>=1){
      if(p[i]->h-a->h>0){
    p[i]->a;
    }else{
      p[i]->a;
    }
    }
  }
  for(i=0;;i++){
    if(i>=1){
      if(p[i]->h-c->h<0){
    p[i]->c;
    }else{
      p[i]->c;
    }
    }
  }
  for(i=0;;i++){
    if(i>=1){
      if((p[i]->h)-(b->h)<0){
    p[i]->b;
    }else{
      p[i]->b;
    }
    }
  }
  for(i=0;;i++){
    if(i>=1){
      if(p[i]->w-d->w<0){
    p[i]->d;
      }
    }else{
      p[i]->d;
    }
  }
  printf("Tallest student number is %d (%d)\n", a.num, a.h);
  return 0;
}