大佬们请问我的程序为什么运行不了,是不是要大改?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct playdate
{
    float playerscore[10];
    float ave;
    float sum;
    char num[20];
    char name[20];
}
play[2]; 
void getDate()
{   
    int i;
    printf("请输入两名选手数据:编号 姓名\n");
    for(i=0;i<2;i++)
    {   
        scanf("%s",&play[i].num);
        getchar( );
        scanf("%s",&play[i].name);
        getchar( );
    }
    FILE *p1 = fopen("xinxi.txt", "a+");
    if(p14 == NULL)
        {
            printf("open error!\n");
        }       
        if(p1 == NULL)
        {
            printf("open error!\n");
        }   
         for(i=0;i<5;i++)
        {
        fputs(play[i].num,p1);//存疑 
        fputs("\t",p1);
        fputs(play[i].name,p1);//存疑 
        fputs("\n",p1);
        }
        fclose(p1);            
}
void scoreDate()
{   int i,j;
    FILE *p1 = fopen("xinxi.txt","a");
    for(i=0;i<2;i++)
    {
        printf("请输入评委打分;");        
        for(j=0;j<10;j++)
        {
        fscanf(p1,"%s",play[i].playerscore[j]);    
        fputs("\t",p1);
        fputc(play[i].playerscore[j],p1);       
        }       
    }
    fclose(p1);//制表? 

}
void scorank()
{   int i,j;
    float max,min;
    FILE *p1 = fopen("xinxi.txt","a");
    for(i=0;i<2;i++)
    {
        play[i].sum=0;
        play[i].ave=0;
        for(j=0;j<10;j++)
        {
        play[i].sum+=play[i].playerscore[j];            
        fputs("\t",p1);
        fputc(play[i].sum,p1);    
        }
    }
    max=play[i].playerscore[0];
    min=play[i].playerscore[0];
    for(j=1;j<10;j++)
    {
    if (play[i].playerscore[j]>max)
        max = play[i].playerscore[j];
    if (play[i].playerscore[j]<min)
        min = play[i].playerscore[j];
    }
    play[i].ave=(play[i].sum-max-min)/8;    
    fputs("\t",p1);
    fputc(play[i].ave,p1);          
}//按平均分排序还未做。
void finDate()
{ char k;
  int j;
  FILE *p1 = fopen("xinxi.txt","r");    
  printf("请输入要查询的学生编号:\n");
  getchar();
  scanf("%s",&k);        
  printf("%s\t%s\t",play[k-1].num,play[k-1].name);    
  for(int j = 0; j < 10; j++)
  {
        printf("%.2f\t", play[k-1].playerscore[j]);
  }
  printf("%.2f\t%.2f", play[k-1].sum, play[k-1].ave);     
}
void addstuDate()
{   
    int m;   
    FILE *p1 = fopen("xinxi.txt", "a");
    printf("这是第几个追加选手:\n"); 
    getchar( );
    scanf("%d",&m);
    printf("请输入要追加的选手数据:(编号 姓名 )\n"); 
        scanf("%s",&play[m+2].num);
        getchar( );
        scanf("%s",&play[m+2].name);
        getchar( );
        fputs(play[m+2].num,p1);
        fputs("\t",p1);
        fputs(play[m+2].name,p1);
        fputs("\n",p1);            
        fclose(p1);        
}
void    writeFile()
{
    int m,j;   
    FILE *p1 = fopen("xinxi.txt", "a");
    printf("这是第几个追加选手:\n"); 
    getchar( );
    scanf("%d",&m);
    printf("请输入评委打分:\n"); 
    for(j=0;j<10;j++)
        {
        fscanf(p1,"%s",play[m+2].playerscore[j]);    
        fputs("\t",p1);
        fputc(play[m+2].playerscore[j],p1);       
        }
     fclose(p1);                   
}
void closeMenu()
{
    exit(0);
}    
void Display()//菜单界面
{
    int choice=0;
    printf("\t=======歌手比赛系统=======\t\n\n");
    printf("\t1、输入选手数据\t\n\n");
    printf("\t2、评委打分\t\n\n");
    printf("\t3、成绩排序\t\n\n");
    printf("\t4、数据查询\t\n\n"); 
    printf("\t5、追加学生数据\t\n\n");
    printf("\t6、写入数据文件\t\n\n");
    printf("\t7、退出系统\t\n\n");
    scanf("%d",&choice);
    switch(choice)
    {
        case 1:
        getDate();
        break;
        case 2:
        scoreDate();
        break;
        case 3:
        scorank();
        break;
        case 4:
        finDate();
        break;
        case 5:
        addstuDate();
        break;
        case 6:
        writeFile();
        break;
        case 7:
        closeMenu();
        break;
    
    }

int main()
{

    Display();
    return 0;
}

p14那里是传上来误输!这个不用在意,主要是我发现我这个程序连名字和编号都录入不了,是文件方法用错了吗?

请你把程序的第一部分 -- 输入实现了, 你可以单步执行看看错在哪里。