帮忙看一下这个C程序哪里有问题

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 3
void input();
void output();
void add();
void Delete();
void modify();
void find();
void statistics();
void write();
void read();
struct student
{
	char *name[30];
	int *num;
	float score[3];
}stu[N];
main()
{
	int x;
	printf("请输入选项1输入2输出3增加4删除5修改6查询7统计8写入9读出:");
	scanf("%d",&x);
	switch(x)
	{
	case 1:input();break;
	case 2:output();break;
	case 3:add();break;
	case 4:Delete();break;
	case 5:modify();break;
	case 6:find();break;
	case 7:statistics();break;
	case 8:write();break;
	case 9:read();break;
    default:printf("\n");
	}
}
void input()
{
	int i;
	for(i=0;i<N;i++){
 	printf("请输入学生的学号 姓名 数学成绩 语文成绩 英语成绩:\n");
		scanf("%d %s %f %f %f",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
	}
}
void output()
{
	int i;
	
	for(i=0;i<N;i++){
		printf("输出学号 姓名 数学成绩 语文成绩 英语成绩:\n");
		printf("%d %s %f %f %f",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
	}
}
void add()
{
	int i,m,j;
	printf("请输入增加学生数:\n");
	scanf("%d",&m);
	if(m=0)
	{
		for(i=N;i<N+m;i++)
		{
			printf("请输入第%d个学生的学号:\n",i+1);
			scanf("%d",stu[i].num);
			for(j=0;j<i;j++){
				if((strcmp(stu[i].num,stu[j].num))==0)
				{
					printf("改学号已存在,请重新输入!\n");
					break;
				}
			}
			if(i>N){
					printf("请输入%d个学生的姓名\t数学成绩\t语文成绩\t英语成绩:\n");
		            scanf("%d %f %f %f",stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
			}
		}
	}
	i=N+m;
	printf("增加完成\n");
}
void Delete()
{
	char old_num[20]={0};
	char old_name[20]={0};
	int i,j,option;
	scanf("%d",&option);
	printf("请输入删除时选项:");
	switch(option)
	{
	case 1:
		printf("根据学号删除:\n");
		scanf("%d",&old_num);
		while((strcmp(stu[i].num,old_num))!=0&&(i<N))
		{i++;}
		if(i==N){
			printf("no find!\n");
		};break;
	case 2:
		printf("根据姓名删除:\n");
		scanf("%s",&old_name);
		while((strcmp(stu[i].name,old_name))!=0&&(i<N))
		{i++;}
		if(i==N){
	    	printf("no find!\n");
		};break;
	default:printf("\n");
	}
	for(j=i;j<N;j++){
		strcpy(stu[j].num,stu[j+1].num);
		strcpy(stu[j].name,stu[j+1].name);
		stu[j].score,stu[j+1].score;
	}
	printf("删除成功!\n");
	return (N-1);
} 
void modify()
{
	int option,change,i;
	char old_temp[20]={0};
	char new_temp[20]={0};
	float newscore[3];
	printf("请输入修改时选项:");
	scanf("%d",&option);
	switch(option)
	{
	case 1:
		printf("根据学号修改:\n");
		scanf("%d",&old_temp);
		while((strcmp(stu[i].num,old_temp)!=0)&&(i<N))
		{i++;}
		if(i=N){
			printf("no find!\n");
		};break;
	case 2:
		printf("根据姓名修改:\n");
		scanf("%s",&old_temp);
		while((strcmp(stu[i].name,old_temp)!=0)&&(i<N))
		{i++;}
		if(i=N){
			printf("no find!\n");
		};break;
	default:printf("\n");
	}
	printf("请输入修改后时的选项:");
	scanf("%d",&change);
	switch(change)
	{
    case 1:
		printf("输入修改后的学号:\n");
		scanf("%d",&new_temp);
		strcpy(stu[i].num,new_temp);
		printf("修改成功!\n");break;
	case 2:
		printf("输入修改后的姓名:\n");
		scanf("%s",&new_temp);
		strcpy(stu[i].name,new_temp);
		printf("修改成功!\n");break;
    case 3:
		printf("输入修改后的数学成绩、语文成绩、英语成绩:\n");
		scanf("%f %f %f\n",&newscore[0],&newscore[1],&newscore[2]);
		stu[i].score[3]=newscore[3];
		printf("修改成功!\n");break;
	default:printf("\n");
	}
}
void find()
{
	int i=0,option;
	char search_num[20]={0};
	char search_name[20]={0};
	printf("请输入查询时选项:");
	switch(option)
	{
	case 1:
		printf("根据学号查询:\n");
		scanf("%d",&search_num);
		while((strcmp(stu[i].num,search_num))!=0&&(i<N))
		{i++;}
		if(i==N){
			printf("no find!\n");
		};break;
	case 2:
		printf("根据姓名查询:\n");
		scanf("%s",&search_name);
		while((strcmp(stu[i].name,search_name))!=0&&(i<N))
		{i++;}
		if(i==N){
	    	printf("no find!\n");
		};break;
	default:printf("\n");
	}
	printf("输出学号姓名 数学成绩 语文成绩 英语成绩:\n");
	scanf("%d %s %f %f %f",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
void statistics()
{
	int i,option,x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,x7=0,x8=0,x9=0;
		printf("请输入要统计信息的选项:");
		scanf("%d",&option);
	if(option==1){ for(i=0;i<N;i++){ if(stu[i].score[0]>=60&&stu[i].score[0]<=69) x1++; } printf("%d",x1); }
	if(option==2){ for(i=0;i<N;i++){ if(stu[i].score[0]>=70&&stu[i].score[0]<=79) x2++; } printf("%d",x2); }
	if(option==3){ for(i=0;i<N;i++){ if(stu[i].score[0]<60&&stu[i].score[0]>=80) x3++; } printf("%d",x3); }
	if(option==4){ for(i=0;i<N;i++){ if(stu[i].score[1]>=60&&stu[i].score[1]<=69) x4++; } printf("%d",x4); }
	if(option==5){ for(i=0;i<N;i++){ if(stu[i].score[1]>=70&&stu[i].score[1]<=79) x5++; } printf("%d",x5); }
	if(option==6){ for(i=0;i<N;i++){ if(stu[i].score[1]<60&&stu[i].score[1]>=80) x6++; } printf("%d",x6); }
	if(option==7){ for(i=0;i<N;i++){ if(stu[i].score[2]>=60&&stu[i].score[2]<=69) x7++; } printf("%d",x7); }
	if(option==8){ for(i=0;i<N;i++){ if(stu[i].score[2]>=70&&stu[i].score[2]<=79) x8++; } printf("%d",x8); }
	if(option==9){ for(i=0;i<N;i++){ if(stu[i].score[2]<60&&stu[i].score[2]>=80) x9++; } printf("%d",x9); }
}
void write()
{
	FILE *p;
	int i;
	if((p=fopen("file.txt","w"))==NULL)
	{
		printf("can not open this file!\n");
		exit(0);
	}
	fprintf(p,"%d",N);
	for(i=0;i<N;i++)
	{
		fprintf(p,"%s %s %f %f %f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
	}
	fclose(p);
	printf("写入成功!\n");
}
void read()
{
	FILE *p;
	int i,num;
	if((p=fopen("file.txt","r"))==NULL)
	{
		printf("can not open this file!\n");
		exit(0);
	}
	fscanf(p,"%d",&num);
	for(i=0;i<num;i++)
	{
		fscanf(p,"%d %s %f %f %f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
	}
	i=N+num;
	fclose(p);
	printf("读出成功!\n");
}

 

 










 

你运行的时候,出错信息,截图发下

第44行,scanf("%d %s %f %f %f",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);

数据结构里定义 int *num有问题,还没有new空间呢,这里scanf是不行的,建议还是用int num,这里用&stu[i].num比较好,不然你就要先stu[i].num = new int;才可以。另外最后三个score,都需要用 &score[0]这样取地址才可以的

printf("%d %s %f %f %f",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);

这里也是一样,stu[i].num是int*,想打印num值的话,必须用*[stu[i].num才可以,不然打印的是指针地址

 

第61行,if(m=0)改成 if(m==0)

类似错误太多了啊,每个函数都有,自己根据上面说的问题检查一下把

您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~

ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓

【电脑端】戳>>>  https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】  戳>>>  https://mall.csdn.net/item/52471?utm_source=1146287632