#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