如下图部分代码所示
我建立了一个结构体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++可使用友元重载 << 运算符