搜索文件里的对应信息,并输出对应信息到屏幕上

void dk()
{
	int id,m=0,i;
	struct STU p;
	FILE *fp;
	if((fp=fopen("stu.txt","r"))==NULL)
	{
		printf("\n文件不存在!\n\n");
		return;
	}
	while(!feof(fp))
	{
		if(fread(&stu[m],LEN,1,fp)==1)
			m++;
	}
	fclose(fp);
	if(m=0)
	{
		printf("\n文件里没有记录!\n\n");
		return;
	}
	printf("\n\n请输入您的学号:\n\n");
	printf("\n\n学号:");
	scanf("%s",p.id);

	for(i=0;i<m;i++)
	{
		if(strcmp(p.id,stu[i].id )==0)
		{
			printf("\n\n找到您的信息\n\n");
			printf("	   学号    姓名     专业     C语言  计算物理学   大学物理  原子物理      光学\n");
			printf(p_out,stu[i].id ,stu[i].name ,stu[i].zhuanye ,
                        stu[i].sc_1,stu[i].sc_2,stu[i].sc_3,stu[i].sc_4,stu[i].sc_5);
			break;
		}
	}
	if(i==m)
	{printf("\n\n未找到您的信息!\n");}
}

这个是通过学号搜索学生,然后把学生的成绩等信息输出到屏幕上,但是每次我都找不到信息qwq,不知道怎么回事

这个是学生信息的一部分:

261003216 李鹏      测控2      74        81        66        66        99
281001102 关迪      物理       85        78        82        55        65
281001103 刘张世安  物理       69        69        90        75        84
281001104 佟璐      物理       92        86        75        71        92
281001105 腾云      物理       88        75        86        53        93
281001106 王目昱    物理       74        81        66        66        99

int input(char *in,struct STU *ps)
{
	int i;
	char a[200];
	FILE *fp;
	if((fp=fopen(in,"r+"))==NULL)
	{
		puts("未找到文件!\n");
		exit(1);
	}
	for(i=0;i<1;i++)		/*为了跳过前几行读取用的*/
	{
		fgets(a,200,fp);
	}
	i=0;
	while(!feof(fp))
	{
		fscanf(fp,p_in,&ps[i].id ,ps[i].name ,ps[i].zhuanye ,&ps[i].sc_1 ,&ps[i].sc_2 ,&ps[i].sc_3 ,&ps[i].sc_4 ,&ps[i].sc_5 );
		i++;
	}
	return i;
}

这个是输入数据的部分,应该没有问题的。可以把数据输出到屏幕上

void dk() 函数里,第17行是错的,应该是:if(m==0) 

 

 

如果 学号(id) 字段在结构体里定义的是int型,那么  void dk()函数要改这样:

void dk()
{
	int  m=0,i,id;
	                            //char p_id[10];
	FILE *fp;
	if((fp=fopen("stu.txt","r"))==NULL)
	{
		printf("\n文件不存在!\n\n");
		return;
	}
	while(1)
	{
		if(fread(&stu[m],LEN,1,fp)!=1) break;
                m++;
	}
	fclose(fp);
	if(m==0)
	{
		printf("\n文件里没有记录!\n\n");
		return;
	}
	printf("\n\n请输入您的学号:\n\n");
	printf("\n\n学号:");
	scanf("%d",&id)           //scanf("%s",p_id);
	for(i=0;i<m;i++)
	{
		if(id ==  stu[i].id)  //if(strcmp(p_id,stu[i].id )==0)
		{
			printf("\n\n找到您的信息\n\n");
			printf("	   学号    姓名     专业     C语言  计算物理学   大学物理  原子物理      光学\n");
			printf(p_out,stu[i].id ,stu[i].name ,stu[i].zhuanye ,
                        stu[i].sc_1,stu[i].sc_2,stu[i].sc_3,stu[i].sc_4,stu[i].sc_5);
			break;
		}
	}
	if(i==m)
	{printf("\n\n未找到您的信息!\n");}
}

 

这样试试:

/*struct STU {
        char id[15];
        char name[10];
        char zhuanye[20];
        int  sc_1;
        int  sc_2;
        int  sc_3;
        int  sc_4;
        int  sc_5;
};
struct STU stu[200];
*/
//学号是 字符型 字段,int input()函数里第18行

//fscanf(fp,p_in,&ps[i].id ,ps[i].name ,ps[i].zhuanye ,
//               &ps[i].sc_1 ,&ps[i].sc_2 ,&ps[i].sc_3 ,&ps[i].sc_4 ,&ps[i].sc_5 );

//需改为:

//fscanf(fp,p_in,ps[i].id ,ps[i].name ,ps[i].zhuanye ,
//             &ps[i].sc_1 ,&ps[i].sc_2 ,&ps[i].sc_3 ,&ps[i].sc_4 ,&ps[i].sc_5 );


void dk()
{
	int  m=0,i; //id,
	char p_id[15];
	FILE *fp;
	if((fp=fopen("stu.txt","r"))==NULL)
	{
		printf("\n文件不存在!\n\n");
		return;
	}
	while(1)
	{
		if(fread(&stu[m],LEN,1,fp)!=1) break;
                m++;
	}
	fclose(fp);
	if(m==0)
	{
		printf("\n文件里没有记录!\n\n");
		return;
	}
	printf("\n\n请输入您的学号:\n\n");
	printf("\n\n学号:");
	scanf("%s",p_id);
	for(i=0;i<m;i++)
	{
		if(strcmp(p_id,stu[i].id )==0)
		{
			printf("\n\n找到您的信息\n\n");
			printf("	   学号    姓名     专业     C语言  计算物理学   大学物理  原子物理      光学\n");
			printf(p_out,stu[i].id ,stu[i].name ,stu[i].zhuanye ,
                        stu[i].sc_1,stu[i].sc_2,stu[i].sc_3,stu[i].sc_4,stu[i].sc_5);
			break;
		}
	}
	if(i==m)
	{printf("\n\n未找到您的信息!\n");}
}