如何输出结构体中指定一项变量信息的全部数据

如下图部分代码所示
我建立了一个结构体users,然后想输出结构体中身份为一般教师的全部教师信息,请问这个应该怎么实现呀?

typedef struct User_basicinfo
{
    char id[15];
    char paw[20];
    char name[15];
    char sex[5];
    char shenfen[20];
}Users;


void check_3_()                                                                                    //浏览一般教师名单
{
    int i=0;
    Users a[];
    FILE *pf=fopen("users.txt","r");
    if(pf==NULL)
    {
        printf("      打开文件失败\n");
        return ;
    }
    fread(&a, sizeof(struct User_basicinfo),1,pf);
     while (1)
           {
               if (strcmp(a[i].shenfen, "一般教师") == 0)         //如果有此类教师
               {
                   i++;
                   printf("----------------------------------------------------------------------------------------------------\n");
                   printf("教师编号  姓名\n");
                   printf("%20s%9s\n",a[i].id,a[i].name);
                   break;
               }

               else
               {
                   if (!feof(pf))  //如果文件没有读完

                   {
                       fread(&a, sizeof(struct User_basicinfo),1,pf);
                   }

                   else
                   {
                       printf("\t\t\t                   ◆无此类教师! ");
                       Sleep(500);
                       fclose(pf);
                       return;
                   }
               }
       }


     printf("\n---------------------------------◇所有信息已显示,按回车返回主菜单◇-------------------------------\n");
     fclose(pf); pf=NULL;
     getchar();
     system("pause");
     checkmenu();
}

修改处见注释,供参考:

#include <stdio.h>
typedef struct User_basicinfo
{
    char id[15];
    char paw[20];
    char name[15];
    char sex[5];
    char shenfen[20];
}Users;


void check_3_() //浏览一般教师名单
{
    int i = 0;
    Users tmp;   //Users a[];
    FILE* pf = fopen("users.txt", "r");
    if (pf == NULL)
    {
        printf("      打开文件失败\n");
        return;
    }
    //fread(&a, sizeof(struct User_basicinfo), 1, pf);
    while (1)
    {
        if (fread(&tmp, sizeof(struct User_basicinfo), 1, pf) == 1) {
            if (strcmp(tmp.shenfen, "一般教师") == 0)         //如果有此类教师
            {
                if (i == 0) {
                    printf("----------------------------------------------------------------------------------------------------\n");
                    printf("教师编号  姓名\n");
                }
                printf("%20s%9s\n", tmp.id, tmp.name);
                i++;
                //break;
            }
        }
        else
            break;
    }
    fclose(pf);
    if (!i)
        printf("\t\t\t                   ◆无此类教师! ");

            //{
            //if (!feof(pf))  //如果文件没有读完

            //{
            //    fread(&a, sizeof(struct User_basicinfo), 1, pf);
            //}

            //else
            //{
    
            //    Sleep(500);
            //    fclose(pf);
            //    return;
            //}
        //}
        //}
        //}
    printf("\n---------------------------------◇所有信息已显示,按回车返回主菜单◇-------------------------------\n");
    //fclose(pf); pf = NULL;
    getchar();
    system("pause");
    checkmenu();
}

sprintf,将所有类型输入到一个缓冲区中,最后打印出来,c++可使用友元重载 << 运算符