首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

另贴修改过的代码请大家帮小弟我修改,

2012-03-12 
另贴修改过的代码请大家帮我修改,十万火急啊#include stdio.h#include stdlib.h#include string.h#d

另贴修改过的代码请大家帮我修改,十万火急啊
#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 ");
}
[解决办法]
唉 ~

热点排行