user-0 提问: 我是大一学生，我不知道程序怎么了，改不对，求帮助（用的是c语言）

回复:
user: user-0
content: 谢谢你们了，你们说的我会注意的，再次谢谢你们的帮助

user: user-1

user: user-2

user: user-3
content: 看到楼主的代码，我也是醉了……我只习惯于写代码，不喜欢看别人的代码……

user: user-4
content: 你的程序就是一处有问题，改动的地方给你添加注释了，我帮你测试了一遍，没有发现其他问题。 但细节上还是需要注意的：比如假如用户在一开始直接输入b，而此时你没有录入成绩的话会输出乱码，你应该处理这个情况。 #include<stdio.h> #include<stdlib.h>  #include<string.h>  #define M 2  #define N 5  struct student {  	char name[20];  	char No[10];  	float score[M];  	char course[M][20];  };  void input(student stu[N]){  	int i,j;  	for(i=0;i<M;i++) {  		printf("Please input course%d:",i+1);  		scanf("%s",stu[0].course[i]); }  	printf("Please import:\nname\tNo\t");  	for(i=0;i<M;i++)  		printf("%s\t",stu[0].course[i]); 	printf("\n");  	for(i=0;i<N;i++) {  		scanf("%s",stu[i].name);  		scanf("%s",stu[i].No);  		for(j=0;j<M;j++)  			scanf("%f",&stu[i].score[j]);  	}  	getchar(); } void show(student stu[N]) {  	int i,j; printf("姓名\t学号\t");  	for(i=0;i<M;i++)  		printf("%s\t",stu[0].course[i]);  	for(i=0;i<N;i++) {  		printf("\n");  		printf("%s\t",stu[i].name);  		printf("%s\t",stu[i].No);  		for(j=0;j<M;j++)  			printf("%.2f\t",stu[i].score[j]);  	}  	printf("\n");  	getchar(); }  void save(student stu[N]) {  	FILE *out;  	int i,j;  	if((out=fopen("course.txt","w"))==NULL) {  		printf("cannot open file\n");  		exit(0); }  	fprintf(out,"姓名\t学号\t");  	for(i=0;i<M;i++)  		fprintf(out,"%s\t",stu[0].course[i]);  	for(i=0;i<N;i++) {  		fprintf(out,"\n");  		fprintf(out,"%s\t%s\t",stu[i].name,stu[i].No);  		for(j=0;j<M;j++)  			fprintf(out,"%.2f\t",stu[i].score[j]); 	}  	//必须添加文件关闭语句，否则信息没办法写入文件 	fclose(out); 	getchar();  } void sort(student stu[N]) {  	int i,j,k;  	printf("Sorted by:");  	for(i=0;i<M;i++)  		printf("%d、%s\t",i+1,stu[0].course[i]);  	printf("\n");  	scanf("%d",&k);			//这里需呀添加判断语句（你怎么知道用户输入的一定是数字） 	/*可以这样写 	char input；				 	scanf("%c",&input); 	if(input != '1' || input != '2') 	{ 		printf(***********) 		return ； 	} 	*/ 	for(i=1;i<N;i++)  		for(j=0;j<i;j++)  			if(stu[i].score[k-1]>stu[j].score[k-1]) {  				char name[20];  				char No[10];  				float score[M];  				strcpy(name,stu[i].name);  				strcpy(stu[i].name,stu[j].name);  				strcpy(stu[j].name,name);  				strcpy(No,stu[i].No);  				strcpy(stu[i].No,stu[j].No);  				strcpy(stu[j].No,No);  				int p;  				for(p=0;p<M;p++) {  					score[p]=stu[i].score[p];  					stu[i].score[p]=stu[j].score[p];  					stu[j].score[p]=score[p];  				}  			}  			getchar(); }                                                                                                                   void change(student stu[N]) {  	char key[20]={"woaini"}; 	char KEY[20]; 	printf("Please input key:");		//最好提示用户这个什么意思 	scanf("%s",KEY); 	if(strcmp(key,KEY)) 	{ 		printf("Error key!"); 		return; 	}  	printf("Which course?\n"); 	int i; 	int p,q; 	char No[10]; 	for(i=0;i<M;i++) 		printf("%d、%s\t",i,stu[0].course[i]); 	printf("\n"); 	scanf("%d",&p); 	printf("No:"); 	scanf("%s",No); 	for(i=0;i<N;i++) 		if(!strcmp(No,stu[i].No)) 		{ 			q=i; 			break; 		} 		if(i==N) 		{ 			printf("没有此学生!"); 			return; 		} 		printf("输入成绩：\n"); 		scanf("%f",&stu[q].score[p]); 		getchar(); } void statistics(student stu[N]) { 	int i,j,k; 	float Max,sum; 	float avg[M]; 	for(i=0;i<M;i++) 	{ 		k=0; 		Max=0; 		for(j=0;j<N;j++) 			if(Max<stu[j].score[i]) 			{ 				Max=stu[j].score[i]; 				k=j; 			} 			printf("%s成绩最高的学生信息:\n",stu[0].course[i]); 			printf("%s\t",stu[k].name); 			printf("%s\t",stu[k].No); 			for(j=0;j<M;j++) 				printf("%.2f\t",stu[k].score[j]); 			printf("\n"); 	} 	for(i=0;i<M;i++) 	{ 		sum=0; 		for(j=0;j<N;j++) 			sum+=stu[j].score[i]; 		printf("%s平均成绩为%.2f:\n",stu[0].course[i],sum/N); 		avg[i]=sum/N; 	} 	for(i=0;i<M;i++) 	{ 		int number=0; 		for(j=0;j<N;j++) 			if(avg[i]<=stu[j].score[i]) 				number++; 		printf("%s超过平均成绩的人数为%d\n",stu[0].course[i],number); 	} 	getchar(); } void main() { 	struct student stu[N]; 	while(1) 	{ 		printf("\na、成绩录入\nb、成绩显示\nc、成绩保存\nd、成绩排序\ne、成绩修改\nf、成绩统计\ng、退出程序\n"); 		char ch;  		scanf("%c",&ch); 		fflush(stdin);	//添加输入缓存刷新语句，否则可能导致无法继续输入。 		switch(ch) 		{ 		case 'a': 			input(stu); 			break; 		case 'b': 			show(stu); 			break; 		case 'c': 			save(stu); 			break; 		case 'd': 			sort(stu); 			break; 		case 'e': 			change(stu); 			break; 		case 'f': 			statistics(stu); 			break; 		case 'g': 			return; 		} 	} }

user: user-5
content: 初次打交道，给你几个找几个bug吧。void input(student stu[N]) void show(student stu[N])等几个函数中，student 前面加 struct。结构体只有struct + 结构名称 才能当变量类型用。几个函数中都加了struct后，你的编译器报错就会减去一半以上。其他的，你自己找找吧

user: user-5
content: 刚大一，就能写出这么长的代码，说明你挺不错的！前面的代码风格很好，到了后面，编程的风格很垃圾！如果是复制粘贴弄乱了你的风格，那么你应该在发帖时使用插入代码功能去粘贴你的代码  这么一大串代码，里面不可能到处都是bug吧？！与其你眉毛胡子一把全贴出来，吓到大家，完了没人给你帮助，你自己感叹世风日下，不如把出错的地方截取出来，把bug贴出来，然后简要地介绍一下。这样大家帮你也方便、有针对性！当然，你最后附上全部的代码，方便大家复制粘贴了去编译更好。但一开始，千万不要把大家吓跑了！ 再啰嗦一点吧，我在你的程序里没看到一处注释（//或/*开头的句子）。你希望人家帮你，你得先让人家知道你在做什么的过程中出现了麻烦，然后人家才能准确的帮到你。把几百行代码随便一贴，然后说自己是大一新生，这样就有人去帮你吗？你大一就很屌吗？ 说得有点重，不过，还是希望你好。毕竟，看你大一就能写出这么长的程序，很不错了！

user: user-6
content: 在没有输入数据时，选择其他的选项出错；       （在选择其他选项的时候判断是否输入过数据，没有的话就提示输入数据然后在执行） 其他的没什么问题