user-0 提问: 新手求助，，，谢谢 程序编译不了，求能帮忙找到错误，程序较大，另一点以发回复

回复:
user: user-0
content: 谢谢谢谢

user: user-1
content: #include <conio.h> #include <stdio.h> #include <string.h> #include <stdlib.h> const int N=1000; typedef struct { 	char name[10]; 	char num[10]; 	float c; } stu; void menu() { 	system("cls");  //清屏 	printf("\n\n\n\n\t\t\t*********   c语言成绩记录薄   ***********\n"); 	printf("\t\t\t|==========================================|\n"); 	printf("\t\t\t|*************1.  录入信息  ***************|\n"); 	printf("\t\t\t|*************2.  查询成绩  ***************|\n"); 	printf("\t\t\t|*************3.  修改信息  ***************|\n"); 	printf("\t\t\t|*************4.  添加学生  ***************|\n"); 	printf("\t\t\t|*************5.  删除成绩  ***************|\n"); 	printf("\t\t\t|*************6.  显示成绩  ***************|\n"); 	printf("\t\t\t|*************7.    统计    ***************|\n"); 	printf("\t\t\t|*************0.    退出    ***************|\n"); 	printf("\t\t\t|==========================================|\n"); 	printf("\t\t\t|******************************************|\n"); 	printf("\n\n\t\t\t      请选择相应的功能<输入编号>:"); } //录入信息 void input() { 	FILE *fp; 	stu	xs;									  /*定义一个结构体变量来装从文件中读出来的数据*/ 	if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","wb"))==NULL) { 		printf("\nopen file error"); 		getchar(); 		exit(1); 		printf("\n录入格式: 姓名 学号 C语言 \n"); 		printf("当输入姓名为 end 结束录入\n"); 		while(1) { 			scanf("%s",xs.name); 			if(strcmp(xs.name,"end")==0) break;   //判断姓名是否为LAST，用字符串判断 			scanf("%s%f",&xs.num,&xs.c); 			fprintf(fp,"%s%s%f",xs.name,xs.num,xs.c);        //将成绩信息写入文件 		} 		fclose(fp); 	} } //姓名定义 void xingming() { 	FILE *fp; 	stu	xs; 	char nam[10]; 	printf("\n请输入需要查询的学生姓名: "); 	scanf("%s",nam); 	if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","rb"))==NULL) { 		printf("can't open the file!\n");exit(0); 	} 	while(!feof(fp))						   //判断文件是否到达末尾，即读取文件失败时 	{ 		fread(&xs,sizeof(stu),1,fp); 		if(strcmp(xs.name,nam)==0)//按姓名查询时判断输入的姓名是否存在，会循环从数据中找取 		{ 			printf(" 学生的信息如下:\n"); 			printf("\n%10s %6s %6s\n","姓名","学号","C语言"); 			printf("%10s %6s %6.2f\n",xs.name,xs.num,xs.c); 			break; 		} 	} 	if(feof(fp)) { 		printf("ERROR，查找失败!!!"); /*学生不存在*/ 		fclose(fp); 	} } //学号定义 void xuehao() { 	FILE *fp; 	stu	xs; 	int	num; 	printf("\n请输入需要查询的学生学号: "); 	scanf("%d",&num); 	if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","rb"))==NULL) { 		printf("can't open the file");exit(0); 	} 	while(!feof(fp)) { 		fread(&xs,sizeof(stu),1,fp); 		char numstr[10];sprintf(numstr,"%d",num); 		if(0==strcmp(xs.num,numstr))/*按学号查询时判断输入的学号是否存在，会循环从数据中找取*/ 		{ 			printf(" 学生的信息如下:\n"); 			printf("\n%10s %6s %6s\n","姓名","学号","C语言"); 			printf("%10s %6s %6.2f\n",xs.name,xs.num,xs.c); 			break; 		} 	} 	if(feof(fp)) 		printf("ERROR，查找失败!!!"); 	fclose(fp); } //查询 void search() { 	char ch1; 	system("cls"); 	printf("请选择何种方式查询<编号>:\n"); 	printf("1->姓名，2->学号:"); 	ch1=getchar();				/*用字符接收*/ 	switch(ch1)					/*判断*/ 	{ 	case '1':xingming();break; 	case '2':xuehao();break; 	} 	getch();					   /*让屏幕停留同时按任意键返回*/ } //修改:输入学生的姓名,查找该学生，若找到则修改该生的成绩信息，并显示修改前后的结果; void modify1() {  	stu	xs; 	FILE *fp; 	char name[10]; 	printf("\n请输入要修改的学生姓名: "); 	scanf("%s",name); 	if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","rb+"))==NULL) { 		printf("can't open the file!\n");exit(0); 	} 	while(!feof(fp)) { 		fread(&xs,sizeof(stu),1,fp); 		if(strcmp(xs.name,name)==0)						 /*判断输入要修改的姓名是否存在*/ 		{ 			printf(" 修改前学生的信息:\n"); 			printf("\n%10s %6s %6s\n","姓名","学号","C语言"); 			printf("%10s %6s %6.2f\n",xs.name,xs.num,xs.c); 			printf("\n请输入 C语言成绩 :"); 			scanf("%f",&xs.c); 			break; 		} 	} 	if(!feof(fp)) { 		printf(" \n 修改后的学生的信息如下:\n"); 		printf("\n%10s %6s %6s\n","姓名","学号","C语言"); 		printf("%10s %6s %6.2f\n",xs.name,xs.num,xs.c); 		fseek(fp,-sizeof(stu),1);	//负号表示后退，1表示文件当前位置 		fprintf(fp,"%s%s%f",xs.name,xs.num,xs.c);  //再重新写入，同时把之前的要修改的覆盖掉 	} else 		printf("\nERROR，学生不存在，修改失败!!"); 	fclose(fp); 	getch(); } //修改:输入学生的学号,查找该学生，若找到则修改该生的成绩信息，并显示修改前后的结果; void modify2() { 	stu	xs; 	FILE *fp; 	int	num; 	printf("\n请输入要修改的学生学号: "); 	scanf("%d",&num); 	if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","rb+"))==NULL) { 		printf("can't open the file!\n");exit(0); 	}  	while(!feof(fp)) { 		fread(&xs,sizeof(stu),1,fp); 		char numstr[10];sprintf(numstr,"%d",num); 		if(0==strcmp(xs.num,numstr))/*按学号查询时判断输入的学号是否存在，会循环从数据中找取*/ 		{ 			printf(" 修改前学生的信息如下:\n"); 			printf("\n%10s %6s %6s\n","姓名","学号","C语言"); 			printf("%10s %6s %6.2f\n",xs.name,xs.num,xs.c); 			printf("\n请输入C语言"); 			scanf("%f",&xs.c); 			break; 		} 	} 	if(!feof(fp)) { 		printf(" \n 修改后的学生的信息如下:\n"); 		printf("\n%10s %6s %6s\n","姓名","学号","C语言"); 		printf("%10s %6s %6.2f\n",xs.name,xs.num,xs.c); 		fseek(fp,-sizeof(stu),1); 		fwrite(&xs,sizeof(stu),1,fp); 	} else 		printf("\nERROR，学生不存在，修改失败!!"); 	getch(); 	fclose(fp);  } //选择修改方式 void modiway() { 	char ch1; 	system("cls"); 	printf("请输入按何种方式修改<编号>:\n"); 	printf("1->姓名，2->学号:"); 	ch1=getchar();		 /*用字符接收*/ 	switch(ch1)			 /*判断*/ 	{ 	case '1':modify1();break; 	case '2':modify2();break; 	}  	getch();/*让屏幕停留同时按任意键返回*/ } //插入:输入学生的平时的各项成绩，插入到指定位置;当指定的位置超出范围时，将其插入到全班的最后，并显示插入成功后的结果 void insert() { 	int	i=0,j,k,lenth; 	FILE *fp; 	stu	s,xs[N]; 	system("cls"); 	printf("\n请输入添加的学生的姓名:"); 	scanf("%s",&s.name); 	printf("\n学生的学号:");scanf("%s",s.num); 	printf("\n学生的成绩：C语言:");scanf("%f",&s.c); 	printf("\n请输入插入到第几行:");scanf("%d",&k); 	if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","rb"))==NULL) { 		printf("can't open the file!\n");exit(0); 	} 	while(!feof(fp)) { 		fread(&xs[i],sizeof(stu),1,fp);/*把数据读入到结构体数组中*/ 		if(feof(fp)) break; 		i++; 	} 	fclose(fp); 	lenth=i;							//记录此时lenth最大 	if(k<lenth && k>=0)					/*k的位置要位于数组范围之内*/ 	{ 		for(j=lenth-1;j>=k;j--) 			xs[j+1]=xs[j];				 /*一开始j是最大的，往后移一个这样移动避免数据被覆盖*/ 		xs[k]=s;					 /*将输入的学生信息加入这个k位置*/ 		lenth++;				   //增加一个学生空间，否则会少一个数据 		if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","wb"))==NULL) { 			printf("不能建立文件!!\n");exit(0); 		} 		for(i=0;i<lenth;i++) 			fwrite(&xs[i],sizeof(stu),1,fp);  //存入数据 	} else/*不再数组范围之内*/ 	{ 		if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","ab"))==NULL) { 			printf("不能建立文件!!\n");exit(0); 		} 		fwrite(&s,sizeof(stu),1,fp); 	} 	fclose(fp); } //显示 void print() { 	FILE *fp; 	stu	s; 	system("cls"); 	if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","rb"))==NULL) { 		printf("can't open the file!\n");exit(0); 	} 	printf("\n%10s %s %6s\n","姓名","学号","C语言"); 	while(!feof(fp)) { 		fread(&s,sizeof(stu),1,fp);	 //从文件中读取成绩信息 		if(feof(fp)) break;		  //判断是否文件尾 		printf("%10s %s %6.2f\n",s.name,s.num,s.c); 	} 	fclose(fp); 	getch(); } //删除:输入学生姓名，若该学生存在，则删除，并显示删除后余下的学生成绩信息  void delete1() {  	stu	xs[N]; 	FILE *fp; 	char name[10]; 	int	i=0,len,k=-1/*k<0是为后面if判断用的*/; 	system("cls"); 	printf("\n请输入要删除的学生姓名: ");scanf("%s",name); 	if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","rb+"))==NULL) { 		printf("can't open the file!\n");exit(0); 	} 	while(!feof(fp)) { 		fread(&xs[i],sizeof(stu),1,fp); 		if(feof(fp)) break; 		if(strcmp(xs[i].name,name)==0) k=i; 		i++; 	} 	fclose(fp);  	//以下是删除后重新写文件  	len=i;/*结构体数组上限*/ 	if(k>=0)/*k>0说明找到删除学生位置*/ 	{ 		if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","wb+"))==NULL) { 			printf("can't open the file!\n");exit(0); 		} 		for(i=0;i<len;i++) { 			if(i==k) continue;/*从这个位置开始写入*/ 			fwrite(&xs[i],sizeof(stu),1,fp); 		} 		fclose(fp); 	} else { 		printf("ERROR,删除失败!!!\n");getch(); 	} /*失败后重新返回菜单*/ 	print(); } //删除:输入学生学号，若该学生存在，则删除，并显示删除后余下的学生成绩信息  void delete2() { 	stu	xs[N]; 	FILE *fp; 	int	num; 	int	i=0,len,k=-1/*k<0是为后面if判断用的*/; 	system("cls"); 	printf("\n请输入要删除的学生学号: "); 	scanf("%d",&num); 	if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","rb+"))==NULL) { 		printf("can't open the file!\n");exit(0); 	} 	char numstr[10];sprintf(numstr,"%d",num); 	while(!feof(fp)) { 		fread(&xs[i],sizeof(stu),1,fp); 		if(feof(fp)) break; 		if(0==strcmp(xs[i].num,numstr))/*按学号查询时判断输入的学号是否存在，会循环从数据中找取*/ 			k=i; 		i++; 	} 	fclose(fp); 	//以下是删除后重新写文件  	len=i;/*结构体数组上限*/ 	if(k>=0)/*k>0说明找到删除学生位置*/ 	{ 		if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","wb+"))==NULL) { 			printf("can't openfile!\n");exit(0); 		} 		for(i=0;i<len;i++) { 			if(i==k) continue;/*从这个位置开始写入*/ 			fwrite(&xs[i],sizeof(stu),1,fp); 		} 		fclose(fp); 	} else { 		printf("ERROR,删除失败!!!\n");getch(); 	} /*失败后重新返回菜单*/ 	print(); } //删除  void deleteway() { 	char ch1; 	system("cls"); 	printf("请输入按何种方式删除:\n"); 	printf("1->姓名，2->学号:"); 	ch1=getchar();/*用字符接收*/ 	switch(ch1)/*判断*/ 	{ 	case '1':delete1();break; 	case '2':delete2();break; 	} 	getch();/*让屏幕停留同时按任意键返回*/ } //统计C语言成绩情况  void count() { 	int	i=0,j=0,k=0,l=0,m=0,n,p,q,r,t,u;   //j,k,m,l分别是指各个分数段，n,p,q,r也是 	FILE *fp; 	stu	s[N], *p1[N],*p2[N],*p3[N],*p4[N];/*用指针数组*/ 	system("cls"); 	if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","rb"))==NULL) { 		printf("can't open the file!\n");exit(0); 	} 	while(!feof(fp)) { 		fread(&s[i++],sizeof(stu),1,fp);/*读入数据*/ 		if(feof(fp)) break;	 //到文件末尾中断程序 	} 	t=i;i=0;		   //t 指最大 	for(u=0;u<t;u++)/*以下每个指针数组用于指向各分数段的学生信息*/ 	{ 		if(s[i].c<60) { 			p1[j++]=&s[i++];continue; 		}									  /*每个学生信息只能位于一个分数段*/ 		if(s[i].c>=60 && s[i].c<80)	{ 			p2[k++]=&s[i++];continue; 		} 		if(s[i].c>=80 && s[i].c<90)	{ 			p3[l++]=&s[i++];continue; 		} 		if(s[i].c>=90) { 			p4[m++]=&s[i++];continue; 		} 	} 	printf("     不及格:姓名 学号 C语言\n"); 	for(n=0;n<j-1;n++) { 		printf("%14s %4s %6.2f\n",p1[n]->name,p1[n]->num,p1[n]->c);      //逐个显示个分数段信息，显示上面指针的内容 	} 	printf(" 60-79分之间:姓名 学号 C语言\n"); 	for(p=0;p<k;p++) { 		printf("%16s %4s %6.2f\n",p2[p]->name,p2[p]->num,p2[p]->c); 	} 	printf(" 80-89分之间:姓名 学号 C语言\n"); 	for(q=0;q<l;q++) { 		printf("%16s %4s %6.2f\n",p3[q]->name,p3[q]->num,p3[q]->c); 	} 	printf("90以上:姓名 学号 C语言\n"); 	for(r=0;r<m;r++) { 		printf("%12s %4s %6.2f\n",p4[r]->name,p4[r]->num,p4[r]->c); 	} 	fclose(fp); 	getch(); } int	main() { 	FILE *fp; 	if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","wb"))==NULL) 	{ 		printf("\nopen file error"); 		getchar(); 		exit(1); 	} 	char ch; 	while(1) 	{ 		menu();// 显示菜单 		ch=getch();//选择菜单 		if(ch=='0') 		break; 		switch(ch)//判断功能项 		{ 			case '1':input();break; 			case '2':search();break; 			case '3':modiway();break; 			case '4':insert();break; 			case '5':deleteway();break; 			case '6':print();break; 			case '7':count();break; 		} 	} 	printf("\n\n\n\t\t\t\tWelcome to use,Goodbye!\02!\n"); 	return 0; }

user: user-2
content: 出错信息呢？

user: user-3
content: 很疑惑，自己写的代码怎么会编译不过去呢？还一下子写这么多，不应该的。  有些函数会要求对应的库函数，需要include对应的头文件。  如果是从别处拷贝的代码，建议了解一下代码的编译运行环境，比如编译器等等。然后再修改成自己编译器识别的函数。

user: user-4
content: 盯住第一条出错信息，思考，改之，然后再编译。

user: user-0
content: "%14s %4s %6.2f\n",p1[n]->name,p1[n]->num,p1[n]->c);      //逐个显示个分数段信息，显示上面指针的内容 	}     printf(" 60-79分之间:姓名 学号 C语言\n");     for(p=0;p<k;p++) 	{         printf("%16s %4s %6.2f\n",p2[p]->name,p2[p]->num,p2[p]->c); 	}     printf(" 80-89分之间:姓名 学号 C语言\n");     for(q=0;q<l;q++) 	{         printf("%16s %4s %6.2f\n",p3[q]->name,p3[q]->num,p3[q]->c); 	}     printf("90以上:姓名 学号 C语言\n");     for(r=0;r<m;r++) 	{         printf("%12s %4s %6.2f\n",p4[r]->name,p4[r]->num,p4[r]->c); 	}     fclose(fp);     getch(); } int main() { FILE *fp; if((fp=fopen("d:\\作业\\C语言成绩记录簿\\c语言txt","wb"))==NULL) { printf("\nopen file error"); getchar(); exit(1); } char ch;     while(1) 	{       menu();// 显示菜单       ch=getch();//选择菜单       if(ch=='0')  		  break;       switch(ch)//判断功能项 	  {       case '1':input();break;       case '2':search();break;       case '3':modiway();break;       case '4':insert();break; 	  case '5':deleteway();break;       case '6':print();break; 	  case '7':count();break; 	  } 	}  	printf("\n\n\n\t\t\t\tWelcome to use,Goodbye!\02!\n"); 	return ; }