あのーくだらないこと聞いてすみませんが、ユーザの入力を求めて
入力が正しくない場合は再度入力を求める処理は以下で間違っているでしょうか?
何も入力しなくても文字数の限度を超えてもスルーされてしまうのですが…

printf("項目「ID」の値を入力してください。\n");
while(fgets(p->ID, 5, stdin) == NULL)
 printf("入力が不正です。もう一度入力してください。\n");