另贴修改过的代码请大家帮我修改,十万火急啊
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 20
typedef struct mark{
char schoolname[10];
int score;
}Mark;
typedef struct item {
char itemname[10];
int itnum; //项目编号
char itsex; //项目类男,女
Mark amark[3];
}Item;
typedef struct school{
char schoolname[10];
int schoolnumber;
int score;
int mscore;
int wscore;
}School;
int menu(){
int selection=0;
printf( "==============================================\n ");
printf( "退出重新选择请重新输入(0):\n ");
printf( "要按学校编号输出请输入(1):\n ");
printf( "要按学校总分排序输出请输入(2):\n ");
printf( "要按男子团体总分排序输出请输入(3):\n ");
printf( "要按女子团体总分排序输出请输入(4):\n ");
printf( "要查询指定学校的指定项目请输入(5):\n ");
printf( "要按项目编号查询取得前三的学校请输入(6):\n ");
printf( "要输入新项目请输入(7):\n ");
scanf( "%d ",& selection );
getchar();// 吃掉回车
if(selection > =0 && selection <=7)
return selection;
else{
printf( "您选择的选择有误,请重新输入!\n ");
return -1;
}
}
void copy_schoolname(School *as,Item *pitem ,int i1,int j1, int ns1){
int j;
j=0;
//printf( "%s ",pitem[i1].amark[j1].schoolname);
printf( "%d%d%d ",i1,j1,ns1);
while(pitem[i1].itemname[j]!= '\0 '){
as[ns1].schoolname[j]=pitem[i1].amark[j1].schoolname[j];
j++;
}
printf( "%s ",as[ns1].schoolname);
}
int input_to_computer(Item *pitem,int *pc){
int pos=0;
char sx;
printf( "请输入项目类别(男项目:m/女项目:w): \n ");
scanf( "%c ",&sx);
//scanf( "%c ",&sx);
while ((sx!= 'w ') && (sx!= 'W ') && (sx!= 'm ') && (sx!= 'M ')){
printf( "输入有误,请重输入!(男项目:m/女项目:w):\n ");
scanf( "%c ",&sx);
}
pos=pc[0]++;
pitem[pos].itsex=sx;
if ((sx== 'm ') || (sx== 'M ')){
pc[1]++;
}else{
pc[2]++;
}
printf( "请输入要存储的项目名: \n ");
scanf( "%s ",&(pitem[pos].itemname));
printf( "请输入第一名的学校的校名: \n ");
scanf( "%s ",&(pitem[pos].amark[0].schoolname));
pitem[pos].amark[0].score=5;
printf( "请输入第二名的学校的校名: \n ");
scanf( "%s ",&(pitem[pos].amark[1].schoolname));
pitem[pos].amark[1].score=3;
printf( "请输入第三名的学校的校名: \n ");
scanf( "%s ",&(pitem[pos].amark[2].schoolname));
pitem[pos].amark[2].score=2;
pitem[pos].itnum=pc[0]; //用于自动生成项目编号,项目数的增加与项目的编号一致
return pc[0];
}
int read_data_from_file(Item * pitem, int *pc){
int pos;
FILE *fp;
fp=fopen( "e:\\scoreStat.txt ", "r ");
if (fp==NULL){
return 0;
}
fscanf(fp, "%d%d%d\n ",&(pc[0]), &(pc[1]), &(pc[2]));
for(pos=1; pos <=pc[0]; pos++){
fscanf(fp, "%s%d%c%s%d%s%d%s%d\n ",&(pitem[pos].itemname), &(pitem[pos].itnum), &(pitem[pos].itsex), \
&(pitem[pos].amark[0].schoolname), &(pitem[pos].amark[0].score), \
&(pitem[pos].amark[1].schoolname), &(pitem[pos].amark[1].score), \
&(pitem[pos].amark[2].schoolname), &(pitem[pos].amark[2].score));
}
fclose(fp);
return pc[0];
}
void input_to_file(int *pc, Item *pitem){
FILE *fp;
fp=fopen( "e:\\scoreStat.txt ", "w ");
if (fp==NULL){
do{
clearerr(fp);
fp=fopen( "e:\\scoreStat.txt ", "w ");
}while(fp!=NULL);
}
fprintf(fp, "%d%d%d\n ",pc[0], pc[1],pc[2]);
for(int i=1; i <=pc[0]; i++){
fprintf(fp, "%s%d%c%s%d%s%d%s%d\n ",pitem[i].itemname, pitem[i].itnum, pitem[i].itsex, \
pitem[i].amark[0].schoolname, pitem[i].amark[0].score, \
pitem[i].amark[1].schoolname, pitem[i].amark[1].score, \
pitem[i].amark[2].schoolname, pitem[i].amark[2].score);
}
}
// 通过寻找项目里面的学校名来建立School
int build_school(School *as,Item *pitem, int rc,int mc, int wc){ //这个可能最难理解了请慢慢看
int i,j,k,ns,nss;
nss=0; //学校的个数
for(i=1; i <=rc; i++){
for(j=0; j <=2; j++){
ns=nss;
if(ns==0){
nss++;
//printf( "%s ",pitem[i].amark[j].schoolname);
copy_schoolname(as,pitem, i, j, nss); //
as[nss].schoolnumber=nss;
as[nss].score=pitem[i].amark[j].score;
if((pitem[i].itsex== 'm ') || (pitem[i].itsex== 'M ')){
as[nss].mscore=pitem[i].amark[j].score;//
}else{
as[nss].wscore=pitem[i].amark[j].score;
}
ns=nss;
}else{
while(ns> 0){
k=0;
k=strcmp(as[ns].schoolname, pitem[i].amark[j].schoolname);
if (k==0){ //已经找过并建立了School的,只记录项目名和加分数
as[nss].score+=pitem[i].amark[j].score;
if((pitem[i].itsex== 'm ') || (pitem[i].itsex== 'M ')){
as[nss].mscore+=pitem[i].amark[j].score;//
}else{
as[nss].wscore+=pitem[i].amark[j].score;
}
break;
}
ns--;
}
if(ns==0){ //比较,没有找到相同的`,未建立
nss++;
copy_schoolname(as,pitem, i, j, ns);//School *as, int i1,int j1, int ns1
as[nss].schoolnumber=nss;
as[nss].score+=pitem[i].amark[j].score;
if((pitem[i].itsex== 'm ') || (pitem[i].itsex== 'M ')){
as[nss].mscore+=pitem[i].amark[j].score;//
}else{
as[nss].wscore+=pitem[i].amark[j].score;
}
}
}
}
}
return nss; // 返回学校数 @@@
}
[解决办法]
有什么问题,修改什么啊?
多说一点啊
[解决办法]
下标从0开始,这些下标都要改:
//for(i=1; i <=rc; i++){
for(i=0; i <rc; i++){
printf( "学校: %s\n ", as[i].schoolname);
printf( "学校编号: %d\n ", as[i].schoolnumber);
printf( "总分: %d\n ", as[i].score);
//printf( "-------------------------------- ");
printf( "--------------------------------\n ");
}
[解决办法]
唉 ~