В функции положить вы открываете файл для чтения, а не для записи, поэтому ваш fprintf не будет иметь никакого эффекта и файл даже не будет создан
if ((flptr = fopen("MASTER.dat","r")) == NULL) {
должно быть
if ((flptr = fopen("MASTER.dat","w")) == NULL) {
Если позже вы попытаетесь прочитать этот несуществующий файл с init , вы не добьетесь успеха
Out из этого положить и init использовать глобальную переменную r и изменить ее, я рекомендую вам использовать локальную переменную, чтобы избежать возможных проблем
Почему вы открываете файл с помощью "r +" в init , когда вы только читаете его?
Когда вы читаете строку через (f) scanf Я рекомендую вам ограничить длину, чтобы не записывать из получателя неопределенное поведение, и всегда проверять результат, например, замените
fscanf(flptr,"%s %s %s",pn,pd,pp);
на
if (fscanf(flptr,"%29s %29s %29s",pn,pd,pp) != 3) {
printf("invalid file contain\n");
return;
}