我的代码有点问题,哪位大侠能给改下!!!谢谢谢谢!!!急用!

keketian521 2011-03-03 01:21:52
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<windows.h>
#include<string.h>
#define max 5
static int k=0; //用来标记猜测的人数
typedef struct player
{
char name[20];
int sorce;
}PLAYER;
PLAYER rec[max];

int qushu();
void display();
void xuanze();
void sys(int a);
int tishi();
void addrec();
void recwrite();
void help();
void delrec();
void viewsname();
void sort();




void main() //主函数
{
display();
}


int qushu() //取数函数
{

srand( (unsigned)time( NULL ) ); //随机数种子设置
int i;
i=rand();
i=i%10000;
i=i+rand();
while(i<1000)
{
i=i+rand();
}
while(i>9999)
{
i=i-rand()%9000;
}


return(i);
}


void display() //开始界面
{
system("cls"); //清屏
printf("\n");
printf("\n");
printf("\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 猜数字游戏 $$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 1:新游戏 $$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 2:浏览记录 $$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 3:帮助说明 $$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 4:清除记录 $$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 5:退出 $$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
xuanze();
}

void xuanze() //选择函数
{
int a;
printf("请输入你所选择的操作数:\n");
scanf("%d",&a);
if(a==1||a==2||a==3||a==4||a==5)
{
sys(a);
}//选择相应的操作数执行函数
else
{
printf("错误的操作数!\n");;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
}

void sys(int a) //操作函数
{
switch(a)
{
case 1:tishi();break;
case 2:viewsname();break;
case 3:help();break;
case 4:delrec();break;
case 5:exit(0);break; //退出
}
}






int tishi() //提示函数
{
int m=0;
int n=0;
int snum;
int num;
num=qushu();
int a,b,c,d;
int af,bf,cf,df;
int i=1;
for(i=1,i<10,i++)
{
printf("请输入您猜测的数字:\n");
scanf("%d",&snum);
if(snum==num)
{k=k+1;
printf("恭喜!你猜对了!四个数就是:%d\n",num);
addrec(); //调用增加记录函数


}
else
{
a=(num-num%1000)/1000;
b=(num%1000-(num%1000)%100)/100;
c=((num%1000)%100-((num%1000)%100)%10)/10; //获取默认四个数字
d=((num%1000)%100)%10;

af=(snum-snum%1000)/1000;
bf=(snum%1000-(snum%1000)%100)/100;
cf=((snum%1000)%100-((snum%1000)%100)%10)/10; //获取输入的四个数字
df=((snum%1000)%100)%10;

if(af==b) m=m+1;
if(af==c) m=m+1;
if(af==d) m=m+1;
if(af==a) n=n+1; //数字比较


if(bf==a) m=m+1;
if(bf==c) m=m+1;
if(bf==d) m=m+1;
if(bf==b) n=n+1; //数字比较


if(cf==a) m=m+1;
if(cf==b) m=m+1;
if(cf==d) m=m+1;
if(cf==c) n=n+1; //数字比较


if(df==a) m=m+1;
if(df==b) m=m+1;
if(df==c) m=m+1;
if(df==d) n=n+1; //数字比较

printf("\n 您输入的数字位置和数字都正确的有 %d 个!\n",n);
printf("\n 您输入的数字位置不正确但数值正确的有 %d 个!\n",m);
printf("\n 您已经猜了%d次,您还有%d次\n",i,9-i);
}

}
return(i);
}





void addrec()
{ char c;
int i;
i=tishi();
rec[k].sorce=9-i;
printf("您要保存记录吗?保存请输入'y'\n");
scanf("%s",&c);
if(c!='y')
{
printf("您没有选择保存,按任意键回到主界面\n");
getchar();
display(); //调用主界面

}
else
{
printf("请输入您的尊姓大名:\n");
scanf("%s",rec[k].name);
recwrite(); //调用写入函数

printf("记录保存成功!按任意键继续回到主界面!");
getchar();
display(); //调用主界面

}


}




void recwrite() //写入记录文件
{
sort(); //调用排序函数
FILE *fp;
fp=fopen("E:\\record.txt","wb");
if(fp==NULL)
printf("写入失败!\n");
fwrite(rec,sizeof(player),max,fp);
fclose(fp);
}


void help() //帮助说明
{
system("cls"); //清屏
printf(" #------------------------------------------#\n");
printf(" #-------------数字竞猜游戏帮助-------------#\n");
printf(" #------------------------------------------#\n");
printf("\n");
printf("1.新游戏中,你可以输入四位数,来竞猜系统自动生成的四个数字!,只有九次的机会,\n");
printf(" 每次机会都有相对应的提示,九次的机会利用完了还没有猜对的话就算失败!四个数字的\n");
printf(" 相应格式在游戏中会有提示!当成功猜出系统给定的数字时候,就会统计你的成绩.当你的\n");
printf(" 成绩比记录文件中的记录好的时候就会提示你是否把记录记录到记录文件中,当你选择是\n");
printf(" 的时候就会接着提示你输入你的名字.再按回车.没有意外就会提示保存成功!\n");
printf(" 还有要说明的是记录中的分数是越低就代表成绩越好!\n");
printf("2.浏览记录有三种方式!第一种只是列出记录中的姓名;第二种是列出记录中的成绩次序\n");
printf(" 第三种是姓名跟成绩一起列出来!\n");
printf("3.清除记录就是把记录文件初始化.即是让记录文件为空!\n");
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}

void delrec() //删除记录
{

FILE *fp;
fp=fopen("E:\\record.txt","rb");
fread(&rec,sizeof(player),max,fp);
for(int i=0;i<max;i++)
{
rec[i].sorce=0;

}
recwrite();
printf("删除成功!\n");
printf("\n");
printf("请按任意键继续...\n");
getchar();

display();
}

void viewsname() //按姓名和记录浏览
{
sort();
system("cls"); //清屏
printf("\n");
printf("记录列表显示如下:\n");
printf("\n");
for(int i=0;i<max;i++)
{
if(rec[i].sorce==0)printf(" <---空记录--->\n");
else

printf(" 第 %d 名: 姓名: %s 分数 %d\n",i+1,rec[i].name,rec[i].sorce);
}

printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
void delrec() //删除记录
{
FILE *fp;
fp=fopen("E:\\record.txt","rb");
fread(&rec,sizeof(player),max,fp);
for(int i=0;i<max;i++)
{
rec[i].sorce=0;
}
recwrite();
printf("删除成功!\n");
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}


void sort()
{
char MAXT;
char MINT;
int MAX;
int MIN;
int m;
int n;
for(m=1,m<=5,m++)
for(n=2,n<=5,n++)
if rec[m].sorce<rec[n].sorce
{
MAX=rec[n].sorce;
MIN=rec[m].sorce;
rec[m].sorce=MAX;
rec[n].sorce=MIN;
MAXT=rec[n].name;
MINT=rec[m].name;
strcpy(rec[m].name,MAXT);
strcpy(rec[n].name,MINT);

}

}
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-03-03
  • 打赏
  • 举报
回复
上帖代码中
strcpy(rec[m].name,MINT);
忘改成
strcpy(rec[m].name,TMPT);

赵4老师 2011-03-03
  • 打赏
  • 举报
回复
void sort() {
char TMPT[20];
int TMP;
int m;
int n;

for (m=1;m<5;m++) {
for(n=m+1;n<=5;n++) {
if (rec[m].sorce < rec[n].sorce) {
TMP=rec[n].sorce;
rec[n].sorce=rec[m].sorce;
rec[m].sorce=TMP;
strcpy(TMPT,rec[n].name);
strcpy(rec[n].name,rec[m].name);
strcpy(rec[m].name,MINT);
}
}
}
}

成绩是score,不是sorce

关于自己是否适合编程的很简单的测试:
在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案:

A里面有10处以上文字或标点错误
B里面没有文字或标点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感

A不适合编程(理由:打字准确度偏低、粗心大意)
B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念)
C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证)
D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!)

如果想从A变成B的话,到我的资源http://zhao4zhong1.download.csdn.net/里面下载“适合程序员的键盘练习”
ttssrs 2011-03-03
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<windows.h>
#include<string.h>
#define max 5
static int k=0; //用来标记猜测的人数
typedef struct player
{
char name[20];
int sorce;
}PLAYER;
PLAYER rec[max];

int qushu();
void display();
void xuanze();
void sys(int a);
int tishi();
void addrec();
void recwrite();
void help();
void delrec();
void viewsname();
void sort();




void main() //主函数
{
display();
}


int qushu() //取数函数
{

srand( (unsigned)time( NULL ) ); //随机数种子设置
int i;
i=rand();
i=i%10000;
i=i+rand();
while(i<1000)
{
i=i+rand();
}
while(i>9999)
{
i=i-rand()%9000;
}


return(i);
}


void display() //开始界面
{
system("cls"); //清屏
printf("\n");
printf("\n");
printf("\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 猜数字游戏 $$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 1:新游戏 $$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 2:浏览记录 $$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 3:帮助说明 $$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 4:清除记录 $$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$ 5:退出 $$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
xuanze();
}

void xuanze() //选择函数
{
int a;
printf("请输入你所选择的操作数:\n");
scanf("%d",&a);
if(a==1||a==2||a==3||a==4||a==5)
{
sys(a);
}//选择相应的操作数执行函数
else
{
printf("错误的操作数!\n");;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
}

void sys(int a) //操作函数
{
switch(a)
{
case 1:tishi();break;
case 2:viewsname();break;
case 3:help();break;
case 4:delrec();break;
case 5:exit(0);break; //退出
}
}






int tishi() //提示函数
{
int m=0;
int n=0;
int snum;
int num;
num=qushu();
int a,b,c,d;
int af,bf,cf,df;
int i=1;
for(i=1;i<10;i++)//for语句格式错误
{
printf("请输入您猜测的数字:\n");
scanf("%d",&snum);
if(snum==num)
{k=k+1;
printf("恭喜!你猜对了!四个数就是:%d\n",num);
addrec(); //调用增加记录函数

}
else
{
a=(num-num%1000)/1000;
b=(num%1000-(num%1000)%100)/100;
c=((num%1000)%100-((num%1000)%100)%10)/10; //获取默认四个数字
d=((num%1000)%100)%10;

af=(snum-snum%1000)/1000;
bf=(snum%1000-(snum%1000)%100)/100;
cf=((snum%1000)%100-((snum%1000)%100)%10)/10; //获取输入的四个数字
df=((snum%1000)%100)%10;

if(af==b) m=m+1;
if(af==c) m=m+1;
if(af==d) m=m+1;
if(af==a) n=n+1; //数字比较


if(bf==a) m=m+1;
if(bf==c) m=m+1;
if(bf==d) m=m+1;
if(bf==b) n=n+1; //数字比较


if(cf==a) m=m+1;
if(cf==b) m=m+1;
if(cf==d) m=m+1;
if(cf==c) n=n+1; //数字比较


if(df==a) m=m+1;
if(df==b) m=m+1;
if(df==c) m=m+1;
if(df==d) n=n+1; //数字比较

printf("\n 您输入的数字位置和数字都正确的有 %d 个!\n",n);
printf("\n 您输入的数字位置不正确但数值正确的有 %d 个!\n",m);
printf("\n 您已经猜了%d次,您还有%d次\n",i,9-i);
}

}
return(i);
}





void addrec()
{ char c;
int i;
i=tishi();//此处;错了
rec[k].sorce=9-i;
printf("您要保存记录吗?保存请输入'y'\n");
scanf("%s",&c);
if(c!='y')
{
printf("您没有选择保存,按任意键回到主界面\n");
getchar();
display(); //调用主界面

}
else
{
printf("请输入您的尊姓大名:\n");
scanf("%s",rec[k].name);
recwrite(); //调用写入函数

printf("记录保存成功!按任意键继续回到主界面!");
getchar();
display(); //调用主界面

}


}




void recwrite() //写入记录文件
{
sort(); //调用排序函数
FILE *fp;
fp=fopen("E:\\record.txt","wb");
if(fp==NULL)
printf("写入失败!\n");
fwrite(rec,sizeof(player),max,fp);
fclose(fp);
}


void help() //帮助说明
{
system("cls"); //清屏
printf(" #------------------------------------------#\n");
printf(" #-------------数字竞猜游戏帮助-------------#\n");
printf(" #------------------------------------------#\n");
printf("\n");
printf("1.新游戏中,你可以输入四位数,来竞猜系统自动生成的四个数字!,只有九次的机会,\n");
printf(" 每次机会都有相对应的提示,九次的机会利用完了还没有猜对的话就算失败!四个数字的\n");
printf(" 相应格式在游戏中会有提示!当成功猜出系统给定的数字时候,就会统计你的成绩.当你的\n");
printf(" 成绩比记录文件中的记录好的时候就会提示你是否把记录记录到记录文件中,当你选择是\n");
printf(" 的时候就会接着提示你输入你的名字.再按回车.没有意外就会提示保存成功!\n");
printf(" 还有要说明的是记录中的分数是越低就代表成绩越好!\n");
printf("2.浏览记录有三种方式!第一种只是列出记录中的姓名;第二种是列出记录中的成绩次序\n");
printf(" 第三种是姓名跟成绩一起列出来!\n");
printf("3.清除记录就是把记录文件初始化.即是让记录文件为空!\n");
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}

void delrec() //删除记录
{

FILE *fp;
fp=fopen("E:\\record.txt","rb");
fread(&rec,sizeof(player),max,fp);
for(int i=0;i<max;i++)
{
rec[i].sorce=0;

}
recwrite();
printf("删除成功!\n");
printf("\n");
printf("请按任意键继续...\n");
getchar();

display();
}

void viewsname() //按姓名和记录浏览
{
sort();
system("cls"); //清屏
printf("\n");
printf("记录列表显示如下:\n");
printf("\n");
for(int i=0;i<max;i++)
{
if(rec[i].sorce==0)printf(" <---空记录--->\n");
else

printf(" 第 %d 名: 姓名: %s 分数 %d\n",i+1,rec[i].name,rec[i].sorce);
}

printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}



void sort()
{
char MAXT[20];
char MINT[20];
int MAX;
int MIN;
int m;
int n;
for(m=1;m<=5;m++)
for(n=2;n<=5;n++)
if (rec[m].sorce < rec[n].sorce)//缺少括号
{
MAX=rec[n].sorce;
MIN=rec[m].sorce;
rec[m].sorce=MAX;
rec[n].sorce=MIN;
MAXT=rec[n].name;
MINT=rec[m].name;
strcpy(rec[m].name,MAXT);
strcpy(rec[n].name,MINT);
}

}
程序中多写了一个delrec函数,其他错误我注释了,最好的sort函数我暂时还不会改,等待高人解答
bdmh 2011-03-03
  • 打赏
  • 举报
回复
自己动手,调试跟踪
zhutianjin4355255 2011-03-03
  • 打赏
  • 举报
回复
什么问题都不说?
ccing 2011-03-03
  • 打赏
  • 举报
回复
我建议自己用DEBUG好好调试一下吧!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧