2 baidu 28942405 baidu_28942405 于 2015.06.11 13:10 提问

C语言小白请大神帮忙改一下代码,谢谢。

#include
#include
#include
#include
#include

void choose();//选择函数
void shu();//猜数字函数
void paihang();//排行榜
void repaihang(int n);//更新排行榜
void replace();//初始化排行榜(没有记录时的排行榜)

typedef struct {
char name[10];
int score;
}re;

int main()
{
printf("-------------------猜数游戏--------------------\n");
printf(" 1. 开始游戏\n");
printf(" 2. 排行榜\n");
printf(" 3. 退出游戏\n\n");
choose();

}

void choose()
{
int n;
printf("请输入序号:");
scanf("%d",&n);
switch(n)
{
case 1:
system("cls");
shu();
break;
case 2:
paihang();
break;
case 3:
exit(0);
break;
}

}

void shu()
{

int a[4],b[4],i,j,n;
srand((unsigned int)time(0));

for(i=0;i<4;i++)a[i]=1+rand()%10;
printf("请输入四个数字:");


for(j=1;j<=10;j++)
{
for(i=0;i<4;i++)
    scanf("%d",&b[i]);
if(b[0]==-1||b[1]==-1||b[2]==-1||b[3]==-1)
    break;
for(i=0;i<4;i++)
{
    if(a[i]==b[i])
        printf("第%d个数对了,你真棒!\n",i+1);
    if(a[i]>b[i])
        printf("第%d个数小了!\n",i+1);
    if(a[i]<b[i])
        printf("第%d个数大了!\n",i+1);     
}
if(a[0]==b[0]&&a[1]==b[1]&&a[2]==b[2]&&a[3]==b[3])
{
    printf("全部猜对了,你用了%d次机会,你真棒!\n",j);

    printf("是否存入排行榜:1.是   2.否\n");
    scanf("%d",&n);
    if(n==1)
        repaihang(j);

}

}
printf("按任意键继续...\n");
getch();
}

void paihang()
{

int i,j,num=0;
re r[5];
re p;//临时结构体
FILE *fp=NULL;
char bang[10]="paihang";

fp=fopen(bang,"rb");
if(fp==NULL)
{
    printf("打开失败!按任意键结束...\n");
    getch();
}
if(fread(&r[num],sizeof(re),1,fp)!=NULL)
    num++;
fclose(fp);
if(num<1)
{
    replace();
}
if(num>1)
{
    for(i=0;i<num;i++)
        for(j=i+1;j<num;j++)
        {
            if(r[i].score>r[j].score)
            {
                strcpy(p.name=r[i].name);
                p.score=r[i].score;
                strcpy(r[i].name=r[j].name);
                r[i].score=r[j].score;
                strcpy(r[j].name=p.name);
                r[j].score=p.score;
            }
        }

    fp=fopen(bang,"wb+");
    if(fp==NULL)
    {
        printf("打开失败!按任意键结束...\n");
        getch();
    }
    for(i=0;i<num;i++)
        if(fwrite(&r[num],sizeof(re),1,fp)!=1)
            printf("error\n");
    fclose(fp);
    printf("排行榜如下所示:\n\n");
    printf("名字\t分数\n");
    if(fread(&r[num],sizeof(re),1,fp)!=NULL)
        printf("%s\t%d\n",p.name,p.score);
    fclose(fp);
}

}

void repaihang(int n)
{
int i,j,num=0,max=0;
re r[5];
re p;
FILE *fp;
char bang[10]="paihang";

fp=fopen(bang,"rb");
if((fread(&r[num],sizeof(re),1,fp)!=NULL)&&num<5)
    num++;
fclose(fp);
if(num<5)//排名不满5个
{
    printf("你的名字是:");
    scanf("%s",r[num].name);
    r[num].score=n;
    num++;
}
else//排名满5个,找出分数最高(成绩最低)的玩家
{
    for(i=0;i<5;i++)
    {
        if(r[i].score>max)
        {
            max=r[i].score;
            j=i;
        }

    }
    if(n<=r[j].score)
    {
        printf("你的名字是:");
        scanf("%s",r[j].name);
        r[j].score=n;
    }
    fp=fopen(bang,"wb");
    for(i=0;i<num;i++)
        if(fwrite(&r[num],sizeof(re),1,fp)!=1)
            printf("error\n");
    fclose(fp);
    fp=fopen(bang,"rb");
    printf("排行榜为:\n");
    printf("名字\t分数\n");
    if(fread(&r[num],sizeof(re),1,fp)!=NULL)
        printf("%s\t%d\n",p.name,p.score);
    fclose(fp);
}

}

void replace()
{
FILE *fp;
re c;
char bang[10]="paihang";
if((fp=fopen(bang,"rb"))==NULL)
{
strcpy(c.name,"player");
c.score=10;
printf("%s\t%d\n",c.name,c.score);
}
fclose(fp);
}

5个回答

u012216727
u012216727   Ds   Rxr 2015.06.11 13:15

这么多代码是没有人愿意看的,更何况你不说哪里出了问题,完全就是个伸手党

baidu_28942405
baidu_28942405 strcpy(p.name=r[i].name); p.score=r[i].score; strcpy(r[i].name=r[j].name); r[i].score=r[j].score; strcpy(r[j].name=p.name); r[j].score=p.score;这个地方报错
2 年多之前 回复
star890124
star890124   2015.06.11 14:17

strcpy(**p.name=r[i].name**); 这个函数没你这么用的吧,传入一个赋值语句? 是strcpy(**p.name,r[i].name**);吧,没仔细看,你用了3个strcpy,全部都是这错。

baidu_28942405
baidu_28942405 谢了
2 年多之前 回复
yangbo50304
yangbo50304   2015.06.11 14:20

把 strcpy(p.name=r[i].name)修改为成逗号
strcpy(p.name, r[i].name)
strcpy(r[i].name,r[j].name)
strcpy(r[j].name,p.name)

baidu_28942405
baidu_28942405 谢了
2 年多之前 回复
u010655288
u010655288   2015.06.12 17:02

代码太长,没有时间去看!

u014306011
u014306011   2015.07.27 20:56

同上,代码太长,没有功夫慢慢去看

Csdn user default icon
上传中...
上传图片
插入图片