user-0 提问: 求助大神

回复:
user: user-1
content: 5楼正解

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: #include<stdio.h> struct student { 	int num; 	char name[20]; 	float score[3]; 	char sex; 	float aver; }stud[5]; int i; void save(struct student stud[]) { 	FILE *fp; 	if((fp=fopen("stu.dat","wb"))==NULL) 	{ 		printf("cannot open file\n"); 		return; 	} 	for(i=0;i<5;i++) 		if(fwrite(&stud[i],sizeof(struct student),1,fp)!=1) 			printf("file write error\n"); 	fclose(fp); } void readf1(struct student stud[]) { 	FILE *fp; 	if((fp=fopen("stu.dat","rb"))==NULL) 	{ 		printf("cannot open file\n"); 		return; 	} 	for(i=0;i<5;i++) 	{ 		if (fread(&stud[i],sizeof(struct student),1,fp)!=1) 			printf("file write error\n"); 	} } void readandsort(struct student stud[]) { 	FILE *fp; 	if((fp=fopen("stu.dat","r"))==NULL) 	{ 		printf("cannot open file\n"); 		return; 	} 	for(i=0;i<5;i++) 	{ 		if (fread(&stud[i],sizeof(struct student),1,fp)!=1) 	    	printf("file write error\n");  	} 	int i,j,k; 	struct  student temp; 	scanf("%d",&stud[i].num); 	scanf("%s",stud[i].name); 	scanf("%f",stud[i].score); 	scanf("%c",&stud[i].sex); 	stud[i].aver=(stud[i].score[0]+stud[i].score[1]+stud[2].score[2])/3; 	for(i=0;i<4;i++) 	{ 		k=i; 		for(j=i+1;j<5;j++) 		{ 			if(stud[j].aver>stud[k].aver) 			{ 				k=j; 				temp=stud[k]; 				stud[k]=stud[i]; 				stud[i]=temp; 			} 		} 	} 	for(i=0;i<5;i++)     printf("%4d",stud[i].num); 	printf("%-20s",stud[i].name); 	printf("%5f",stud[i].score); 	printf("%2c",stud[i].sex); 	printf("%5f",stud[i].aver); 	printf("\n");     fclose(fp); } void f2(struct student stud[]) { 	FILE *fp; 	if((fp=fopen("stud.dat","w"))==NULL) 	{ 		printf("cannot open file\n"); 		return; 	} 	for(i=0;i<5;i++) 	{         if(fwrite(&stud[i],sizeof(struct student),1,fp)!=1) 			printf("file write error\n");     } 	if((fp=fopen("sort.dat","r"))==NULL) 	{ 		printf("cannot open file\n"); 		return; 	}     for(i=0;i<5;i++) 	{ 		if (fread(&stud[i],sizeof(struct student),1,fp)!=1) 	    	printf("file write error\n"); 	} 	fprintf(fp,"%4d",stud[i].num); 	fprintf(fp,"%-20s",stud[i].name); 	fprintf(fp,"%5f",stud[i].score); 	fprintf(fp,"%2c",stud[i].sex); 	fprintf(fp,"%5f",stud[i].aver); 	fclose(fp); } void main() { 	struct student stud[5]={{10001,"qwe",100,100,100,'f'},{10002,"sdf",65,67,78,'m'}, 	{10003,"ert",89,67.98,'f'},{10004,"dgf",56,45,56,'m'},{10005,"uhj",87,74,68,'f'}}; 	void save(struct student stud[]); 	void readf1(struct student stud[]); 	void readandsort(struct student stud[]); 	void f2(struct student stud[]); } 为什么进不去。怎么引用。

user: user-3
content: 楼主你把问题说清楚，是编译报错还是程序功能无法实现。如果是功能无法实现，再写写你想要什么功能，现在什么功能出错，顺便再把代码的简单思路注释上就好了。

user: user-3
content: 引用 2 楼 longhaiyan3 的回复:有几个地方for循环的花括号都没有加上，好好检查代码吧，保证没有低级错误再看 for循环不一定要加花括号吧，如果他只是想循环执行下面的一条语句。 我编译就发现f2()函数最后差个花括号。 另外我看readandsort()函数里的 for(i=0;i<4;i++) { 		k=i; 		for(j=i+1;j<5;j++) 		    if(stud[j].aver>stud[k].aver) 			    k=j; 		{ 			temp=stud[k]; 			stud[k]=stud[i]; 			stud[i]=temp; 		} }这部分，编译是没问题，只是看着就像是括号打错位置了。

user: user-4
content: 有几个地方for循环的花括号都没有加上，好好检查代码吧，保证没有低级错误再看

user: user-0
content: 怎么错的