C语言小游戏相关问题,猜测两次后查询成绩排行榜,然后继续猜测并查询成绩排行榜,则排行榜显示为空
来源:互联网 发布:直接进入知乎 编辑:程序博客网 时间:2024/04/30 06:27
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<windows.h>
#define MAX 5
#define randDom(x) (rand()%x)
//先进行菜单设置,再对菜单内的方法进行实现
//定义玩家结构
typedef struct user{
char *name; //玩家用户名
double score; //游戏所用时间
}User;
static int countMax=10;
void shuru();//输入用户名
void menu(); //主菜单
void menu2(); //游戏记录菜单
void menu3(); //帮助菜单
void rule(); //规则详情
void explain(); //说明详情
void login(); //输入用户名
void liulan(); //浏览排行榜
void paihangbang(); //排行榜菜单
void phbmenu(); //浏览排行榜菜单
void setRecord(char*,double); //写入文件记录
void sortByName(); //储存到文件,排序后输出
int checkOK(int i); //检测用户输入的数和随机产生的数字是非符合标准
int ready(); //产生随机数
int startIn(); //用户输入数字
int checkRight(int i,int n);//判断成功或失败
int setCountMax(); //设置猜测最大次数,默认为10
double getTime(time_t ,time_t ); // 读取运行时间
void endMenu(); //退出界面显示
void exitGame(); //退出游戏
void choose(); //游戏结束后的选择
void startGame(); //开始游戏
int startInFirst(); //第一次输入
int repetition(int,int);
//#include"start.h"
//#include<stdio.h>
int ab=24;
int repetition(int i,int n){
int re=0;
int j=0;
int k=0;
int a[4];
int b[4];
a[0]=i/1000;
b[0]=n/1000;
a[1]=i%1000/100;
b[1]=n%1000/100;
a[2]=i%100/10;
b[2]=n%100/10;
a[3]=i%10;
b[3]=n%10;
for(j=0;j<3;j++){
for(k=0;k<3;k++){
if(a[k]==b[j])re++;
}
}
return re;
}
void login() //输入用户名
{
char a[20],*p=a;
printf("please input your ID:\n");
gets(p);
//use.name=p;
}
void menu(){
system("cls");
char i;
printf(" -------1. 开始游戏-------\n\n");
printf(" -------2. 游戏记录-------\n\n");
printf(" -------3. 规则帮助-------\n\n");
printf(" -------4. 设置最大次数---\n\n");
printf(" -------5. 退出游戏-------\n\n");
printf(" (请按键选择,不需要回车确定) \n\n");
//scanf("%c",&i);
i=getch();
switch(i){
case '1':startGame();
break;
case '2':menu2();
break;
case '3':menu3();
break;
case '4':countMax=setCountMax();
menu();
break;
case '5':exitGame();
break;
default:printf("输入不规范\n");
Sleep(1000); //延时1秒
menu();
break;
};
}
void menu2() //游戏记录菜单
{
int i;
system("cls"); //清屏
printf("****************************************\n");
printf("\t\t\t 1.成绩排行榜\n\n");
printf("\t\t\t 2.返回主菜单\n\n");
printf("\t\t\t 请按键选择,回车确定\n");
printf("****************************************\n");
scanf("%d",&i);
switch(i) //功能函数选择
{
case 1:sortByName();break;
case 2:menu();break;
default:printf("\tError!\n请重新输入:");
Sleep(2000); //延时2秒
menu2();
}
}
void menu3()
{ //system("cls");
char k;
system("cls");
printf("\t--------------------------------------------------------\n");
printf("\t--------------------------------------------------------\n");
printf("\t\t\t 1. 游戏规则\n\n");
printf("\t\t\t 2. 游戏说明\n\n");
printf("\t\t\t 3. 返回主菜单(任意键)\n\n");
//printf("\t\t\t 4. 重置排行榜\n\n");
printf("\t\t\t 请按键选择,不需要回车确定。\n\n");
printf("\t--------------------------------------------------------\n");
printf("\t--------------------------------------------------------\n");
//scanf("%c",&k);
k=getch();
switch(k){
case '1':rule();
break;
case '2':explain();
break;
case '3':menu();
break;
default:menu();
break;
}
//return;
}
void rule()
{ //system("cls");
char k;
system("cls");
printf("游戏规则:\n");
printf("\t------------------------------------------------------------\n");
printf("\t------------------------------------------------------------\n");
printf("\t(1):游戏开始,系统随机产生一位4位数字。\n");
putchar('\n');
printf("\t(2):玩家输入所猜的数字,并按回车键提交。可以用空格隔开。\n");
putchar('\n');
printf("\t(3):系统将提交的数与其自动产生的数进行比较,输出结果。\n");
printf(" ");
putchar('\n');
printf("\t(4):游戏者有有限的X次数的猜测机会,在规定次数内完成,则游戏\n");
printf("\t 成功。否则,游戏失败。");
putchar('\n');
putchar('\n');
printf("\t(5):游戏排行榜中的名次,与玩家游戏成功所用时间有关。\n");
putchar('\n');
printf("\t------------------------------------------------------------\n");
printf("\t------------------------------------------------------------\n");
putchar('\n');
printf("\t返回主菜单,请按1(任意键)\t退出游戏,请按2\n");
k=getch();
switch(k)
{
case '1':menu();
break;
case '2':exitGame();
break;
default:menu();
break;
}
}
void explain()
{
char i;
system("cls");
printf("游戏说明:\n");
printf("\t-------------------------------------------------------------\n");
printf("\t-------------------------------------------------------------\n");
printf("\t(1):此游戏有计时功能。进入游戏后开始计时,猜正确后结束计时。\n");
printf("\t 游戏过程中不显示时间,只有成功猜出数字后才会提示所用时间。\n");
putchar('\n');
putchar('\n');
printf("\t(3):游戏中有浏览排行榜功能。\n");
printf("\t 可以按照所用时间的长短顺序来查看排行榜。\n");
printf("\t 其中只显示前五名玩家的成绩记录。\n");
putchar('\n');
printf("\t-------------------------------------------------------------\n");
printf("\t-------------------------------------------------------------\n");
printf("\n");
printf("\t返回主菜单,请按1(任意键)\t退出游戏,请按2\n");
//scanf("%d",&i);
i=getch();
switch(i)
{
case 1:menu();break;
case 2:exitGame();break;
default:menu();break;
}
return;
}
void startGame() //开始游戏
{ char a[20],*p=a;
int tag;
double t;
int input; //C语言必须在开头定义变量
time_t first;
time_t second;
int num;
//游戏准备,生成随机待猜测数
do{
num=ready();
}while(checkOK(num)==0);
//游戏开始,玩家开始输入
input=startInFirst();//玩家输入数
first=time(NULL);//计时开始
while(checkOK(input)==0){
input=startIn();
};
tag=checkRight(input,ab);//判断成功或失败,并返回提示
second=time(NULL);//计时结束
t=getTime(first,second);
printf("please input your ID:\n");
scanf("%s",p);
printf("用时:\n%lf秒",t);
//use.score=t;
if(tag){
setRecord(p,t);//将记录保存到文件
}
//printf("用时:\n\t%lf秒",t);
choose();//游戏结束后的选择
}
void choose() //游戏结束后的选择
{
int i;
printf("\n\n");
printf(" -------1. 再来一局-------\n\n");
printf(" -------2. 返回主菜单-------\n\n");
printf(" -------3. 退出游戏-------\n\n");
printf(" (请按键选择,回车确定) \n\n");
scanf("%d",&i);
switch(i){
case 1:startGame();
break;
case 2:menu();
break;
case 3:exitGame();
break;
default:printf("输入不规范\n");
system("cls");
Sleep(2000); //延时2秒
choose();
break;
};
}
void exitGame() //退出游戏
{
char ch;
system("cls");
printf("是否退出游戏, yes(y) or no(n)\n");
//scanf("%c",&ch);
ch=getch();
if(ch=='y'){
endMenu();
exit(0);
}
else
menu();
}
void endMenu() //退出界面显示
{
system("cls");
printf("\n\n\n");
printf("\t-------------------------------------------------------------\n");
printf("\t-------------------------------------------------------------\n");
putchar('\n');
printf("\t******** ** ** ** \n");
printf("\t ** ** ** ** \n");
printf("\t ** ** ** ** \n");
printf("\t ** ** *** *** *** ** ** ***** ** \n");
printf("\t ** *** ** * * * * *** * * \n");
printf("\t ** ** ** * * * * ** *** ***** * \n");
printf("\t ** ** ** * * * * ** * * ***** \n");
printf("\t ** ** ** *** ** * * ** * ***** * \n");
putchar('\n');
printf("\t-------------------------------------------------------------\n");
printf("\t-------------------------------------------------------------\n");
printf("\n\n\n");
getchar();
return;
}
double getTime(time_t first,time_t second) // 读取运行时间
{
double a;
a=(double)difftime(second,first);
return a;
}
int setCountMax() //设置猜测最大次数,默认为10
{
int m;
printf("输入最大次数\n");
scanf("%d",&m);
return m;
}
int checkRight(int i,int n){//判断玩家是否胜利
int j=0;//为循环做准备变量
int k=0;
int time;
int r=0;
int rightNum=0;
int worryNum=0;
int a[4];
int b[4];
for(time=1;time<countMax;time++){
if(i==n){
printf("恭喜获胜!\n");
return 1;
}
else{
a[0]=i/1000;
b[0]=n/1000;
a[1]=i%1000/100;
b[1]=n%1000/100;
a[2]=i%100/10;
b[2]=n%100/10;
a[3]=i%10;
b[3]=n%10;
for(j=0;j<4;j++){
if(a[j]==b[j])rightNum++;
for(k=0;k<4;k++){
if(a[j]==b[k])worryNum++;
}
}
r=repetition(i,n);
worryNum=(worryNum-r);
printf("%d个数字正确,%d个数字位置不对\t你还有%d次机会!\n",rightNum,worryNum,countMax-time);
rightNum=0;
worryNum=0;
printf("\n第%d次:\n",time+1);
scanf("%d",&i);
}
// return 0;
}
return 0;
}
int startInFirst() //第一次输入
{
int i;
printf("输入0~9999间的四位数\n");
printf("\n第1次:\n");
scanf("%d",&i);
return i;
}
int startIn() //其余几次输入数字
{
int i;
printf("输入0~9999间没有重复数字的四位数\n");
scanf("%d",&i);
return i;
}
int ready() //产生随机数
{
int i;
i=randDom(10000);
return i;
}
int checkOK(int i) //检测用户输入的数和随机产生的数字是非符合标准
{
/*int a[4];
int j=0;
a[0]=i/1000;
a[1]=i%1000/100;
a[2]=i%100/10;
a[3]=i%10;*/
if(i<0||i>9999){
//printf("输入不规范,需输入0~9999之间的数\n");
return 0;
}
else{
if(i>=0&&i<=9999){
for(j=0;j<3;j++){
if(a[j]==a[j+1]){
//error();
return 0;
}
}
for(j=0;j<2;j++){
if(a[j]==a[j+2]){
// error();
return 0;
}
}
for(j=0;j<1;j++){
if(a[j]==a[j+3]){
// error();
return 0;
}
}
}*/
else
return 1;
}
void setRecord(char*a,double t) //写入文件记录
{
User use;
use.name =a;
use.score=t;
FILE *fp;
fp=fopen("D:\\timerank.dat","ab");
if(fp==0)
{
printf("写入失败\n");
exit(1);
}
fwrite(&use,sizeof(User),1,fp);
fclose(fp);
}
void sortByName() //储存到文件,排序后输出
{
int choose;
int i,j;
int k=1;
User TempS;/* 定义进行操作时的临时结构体变量 */
User s[10]={};
int recNumber=0;
FILE *fp=NULL;
fp=fopen("D:\\timerank.dat","rb");
/* 将文件中要排序的信息存入结构体数组 */
while(fread(&s[recNumber],sizeof(User),1,fp)!=0)
{
recNumber++;
}
fclose(fp);
for(i=0;i<recNumber-1;i++)
{
for(j=0;j<recNumber-1-i;j++)
{
if((s[j].score>s[j+1].score))
{
/*strcpy(TempS.name,s[j].name);
strcpy(s[j].name,s[j+1].name);
strcpy(s[j+1].name,TempS.name);*/
TempS.name=s[j].name;
s[j].name=s[j+1].name;
s[j+1].name=TempS.name;
TempS.score=s[j].score;
s[j].score=s[j+1].score;
s[j+1].score=TempS.score;
}
}
/* 将排序好的记录写入文件 */
fp=fopen("D:\\timerank.dat","wb");
fwrite(s,sizeof(s),1,fp);
fclose(fp);
}
/* 显示排序后的文件 */
fp=fopen("D:\\timerank.dat","rb");
if(fp==NULL)
{
printf("文件错误\n");
exit(1);
}
printf("*排名\t玩家姓名\t所用时间\n");
while(fread(&TempS,sizeof(User),1,fp)!=0)
{ if(k<6){
printf("%d\t%s\t\t%lf\n",k++,TempS.name,TempS.score);
}
}
fclose(fp);
printf("\n\n");
//printf(" -------1. 返回上一级-------\n\n");
printf(" -------1. 返回主菜单-------\n\n");
printf(" -------2. 退出游戏(任意键退出)-------\n\n");
printf(" (请按键选择,回车确定) \n\n");
scanf("%d",&choose);
switch(choose){
//case 1:startGame();
// break;
case 1:menu();
break;
case 2:exitGame();
break;
default:exitGame();
break;
};
}
int main()
{
menu();
return 0;
}
请问为什么会这样
C语言小游戏相关问题,猜测两次后查询成绩排行榜,然后继续猜测并查询成绩排行榜,则排行榜显示为空
#include<time.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<windows.h>
#define MAX 5
#define randDom(x) (rand()%x)
//先进行菜单设置,再对菜单内的方法进行实现
//定义玩家结构
typedef struct user{
char *name; //玩家用户名
double score; //游戏所用时间
}User;
static int countMax=10;
void shuru();//输入用户名
void menu(); //主菜单
void menu2(); //游戏记录菜单
void menu3(); //帮助菜单
void rule(); //规则详情
void explain(); //说明详情
void login(); //输入用户名
void liulan(); //浏览排行榜
void paihangbang(); //排行榜菜单
void phbmenu(); //浏览排行榜菜单
void setRecord(char*,double); //写入文件记录
void sortByName(); //储存到文件,排序后输出
int checkOK(int i); //检测用户输入的数和随机产生的数字是非符合标准
int ready(); //产生随机数
int startIn(); //用户输入数字
int checkRight(int i,int n);//判断成功或失败
int setCountMax(); //设置猜测最大次数,默认为10
double getTime(time_t ,time_t ); // 读取运行时间
void endMenu(); //退出界面显示
void exitGame(); //退出游戏
void choose(); //游戏结束后的选择
void startGame(); //开始游戏
int startInFirst(); //第一次输入
int repetition(int,int);
//#include"start.h"
//#include<stdio.h>
int ab=24;
int repetition(int i,int n){
int re=0;
int j=0;
int k=0;
int a[4];
int b[4];
a[0]=i/1000;
b[0]=n/1000;
a[1]=i%1000/100;
b[1]=n%1000/100;
a[2]=i%100/10;
b[2]=n%100/10;
a[3]=i%10;
b[3]=n%10;
for(j=0;j<3;j++){
for(k=0;k<3;k++){
if(a[k]==b[j])re++;
}
}
return re;
}
void login() //输入用户名
{
char a[20],*p=a;
printf("please input your ID:\n");
gets(p);
//use.name=p;
}
void menu(){
system("cls");
char i;
printf(" -------1. 开始游戏-------\n\n");
printf(" -------2. 游戏记录-------\n\n");
printf(" -------3. 规则帮助-------\n\n");
printf(" -------4. 设置最大次数---\n\n");
printf(" -------5. 退出游戏-------\n\n");
printf(" (请按键选择,不需要回车确定) \n\n");
//scanf("%c",&i);
i=getch();
switch(i){
case '1':startGame();
break;
case '2':menu2();
break;
case '3':menu3();
break;
case '4':countMax=setCountMax();
menu();
break;
case '5':exitGame();
break;
default:printf("输入不规范\n");
Sleep(1000); //延时1秒
menu();
break;
};
}
void menu2() //游戏记录菜单
{
int i;
system("cls"); //清屏
printf("****************************************\n");
printf("\t\t\t 1.成绩排行榜\n\n");
printf("\t\t\t 2.返回主菜单\n\n");
printf("\t\t\t 请按键选择,回车确定\n");
printf("****************************************\n");
scanf("%d",&i);
switch(i) //功能函数选择
{
case 1:sortByName();break;
case 2:menu();break;
default:printf("\tError!\n请重新输入:");
Sleep(2000); //延时2秒
menu2();
}
}
void menu3()
{ //system("cls");
char k;
system("cls");
printf("\t--------------------------------------------------------\n");
printf("\t--------------------------------------------------------\n");
printf("\t\t\t 1. 游戏规则\n\n");
printf("\t\t\t 2. 游戏说明\n\n");
printf("\t\t\t 3. 返回主菜单(任意键)\n\n");
//printf("\t\t\t 4. 重置排行榜\n\n");
printf("\t\t\t 请按键选择,不需要回车确定。\n\n");
printf("\t--------------------------------------------------------\n");
printf("\t--------------------------------------------------------\n");
//scanf("%c",&k);
k=getch();
switch(k){
case '1':rule();
break;
case '2':explain();
break;
case '3':menu();
break;
default:menu();
break;
}
//return;
}
void rule()
{ //system("cls");
char k;
system("cls");
printf("游戏规则:\n");
printf("\t------------------------------------------------------------\n");
printf("\t------------------------------------------------------------\n");
printf("\t(1):游戏开始,系统随机产生一位4位数字。\n");
putchar('\n');
printf("\t(2):玩家输入所猜的数字,并按回车键提交。可以用空格隔开。\n");
putchar('\n');
printf("\t(3):系统将提交的数与其自动产生的数进行比较,输出结果。\n");
printf(" ");
putchar('\n');
printf("\t(4):游戏者有有限的X次数的猜测机会,在规定次数内完成,则游戏\n");
printf("\t 成功。否则,游戏失败。");
putchar('\n');
putchar('\n');
printf("\t(5):游戏排行榜中的名次,与玩家游戏成功所用时间有关。\n");
putchar('\n');
printf("\t------------------------------------------------------------\n");
printf("\t------------------------------------------------------------\n");
putchar('\n');
printf("\t返回主菜单,请按1(任意键)\t退出游戏,请按2\n");
k=getch();
switch(k)
{
case '1':menu();
break;
case '2':exitGame();
break;
default:menu();
break;
}
}
void explain()
{
char i;
system("cls");
printf("游戏说明:\n");
printf("\t-------------------------------------------------------------\n");
printf("\t-------------------------------------------------------------\n");
printf("\t(1):此游戏有计时功能。进入游戏后开始计时,猜正确后结束计时。\n");
printf("\t 游戏过程中不显示时间,只有成功猜出数字后才会提示所用时间。\n");
putchar('\n');
putchar('\n');
printf("\t(3):游戏中有浏览排行榜功能。\n");
printf("\t 可以按照所用时间的长短顺序来查看排行榜。\n");
printf("\t 其中只显示前五名玩家的成绩记录。\n");
putchar('\n');
printf("\t-------------------------------------------------------------\n");
printf("\t-------------------------------------------------------------\n");
printf("\n");
printf("\t返回主菜单,请按1(任意键)\t退出游戏,请按2\n");
//scanf("%d",&i);
i=getch();
switch(i)
{
case 1:menu();break;
case 2:exitGame();break;
default:menu();break;
}
return;
}
void startGame() //开始游戏
{ char a[20],*p=a;
int tag;
double t;
int input; //C语言必须在开头定义变量
time_t first;
time_t second;
int num;
//游戏准备,生成随机待猜测数
do{
num=ready();
}while(checkOK(num)==0);
//游戏开始,玩家开始输入
input=startInFirst();//玩家输入数
first=time(NULL);//计时开始
while(checkOK(input)==0){
input=startIn();
};
tag=checkRight(input,ab);//判断成功或失败,并返回提示
second=time(NULL);//计时结束
t=getTime(first,second);
printf("please input your ID:\n");
scanf("%s",p);
printf("用时:\n%lf秒",t);
//use.score=t;
if(tag){
setRecord(p,t);//将记录保存到文件
}
//printf("用时:\n\t%lf秒",t);
choose();//游戏结束后的选择
}
void choose() //游戏结束后的选择
{
int i;
printf("\n\n");
printf(" -------1. 再来一局-------\n\n");
printf(" -------2. 返回主菜单-------\n\n");
printf(" -------3. 退出游戏-------\n\n");
printf(" (请按键选择,回车确定) \n\n");
scanf("%d",&i);
switch(i){
case 1:startGame();
break;
case 2:menu();
break;
case 3:exitGame();
break;
default:printf("输入不规范\n");
system("cls");
Sleep(2000); //延时2秒
choose();
break;
};
}
void exitGame() //退出游戏
{
char ch;
system("cls");
printf("是否退出游戏, yes(y) or no(n)\n");
//scanf("%c",&ch);
ch=getch();
if(ch=='y'){
endMenu();
exit(0);
}
else
menu();
}
void endMenu() //退出界面显示
{
system("cls");
printf("\n\n\n");
printf("\t-------------------------------------------------------------\n");
printf("\t-------------------------------------------------------------\n");
putchar('\n');
printf("\t******** ** ** ** \n");
printf("\t ** ** ** ** \n");
printf("\t ** ** ** ** \n");
printf("\t ** ** *** *** *** ** ** ***** ** \n");
printf("\t ** *** ** * * * * *** * * \n");
printf("\t ** ** ** * * * * ** *** ***** * \n");
printf("\t ** ** ** * * * * ** * * ***** \n");
printf("\t ** ** ** *** ** * * ** * ***** * \n");
putchar('\n');
printf("\t-------------------------------------------------------------\n");
printf("\t-------------------------------------------------------------\n");
printf("\n\n\n");
getchar();
return;
}
double getTime(time_t first,time_t second) // 读取运行时间
{
double a;
a=(double)difftime(second,first);
return a;
}
int setCountMax() //设置猜测最大次数,默认为10
{
int m;
printf("输入最大次数\n");
scanf("%d",&m);
return m;
}
int checkRight(int i,int n){//判断玩家是否胜利
int j=0;//为循环做准备变量
int k=0;
int time;
int r=0;
int rightNum=0;
int worryNum=0;
int a[4];
int b[4];
for(time=1;time<countMax;time++){
if(i==n){
printf("恭喜获胜!\n");
return 1;
}
else{
a[0]=i/1000;
b[0]=n/1000;
a[1]=i%1000/100;
b[1]=n%1000/100;
a[2]=i%100/10;
b[2]=n%100/10;
a[3]=i%10;
b[3]=n%10;
for(j=0;j<4;j++){
if(a[j]==b[j])rightNum++;
for(k=0;k<4;k++){
if(a[j]==b[k])worryNum++;
}
}
r=repetition(i,n);
worryNum=(worryNum-r);
printf("%d个数字正确,%d个数字位置不对\t你还有%d次机会!\n",rightNum,worryNum,countMax-time);
rightNum=0;
worryNum=0;
printf("\n第%d次:\n",time+1);
scanf("%d",&i);
}
// return 0;
}
return 0;
}
int startInFirst() //第一次输入
{
int i;
printf("输入0~9999间的四位数\n");
printf("\n第1次:\n");
scanf("%d",&i);
return i;
}
int startIn() //其余几次输入数字
{
int i;
printf("输入0~9999间没有重复数字的四位数\n");
scanf("%d",&i);
return i;
}
int ready() //产生随机数
{
int i;
i=randDom(10000);
return i;
}
int checkOK(int i) //检测用户输入的数和随机产生的数字是非符合标准
{
/*int a[4];
int j=0;
a[0]=i/1000;
a[1]=i%1000/100;
a[2]=i%100/10;
a[3]=i%10;*/
if(i<0||i>9999){
//printf("输入不规范,需输入0~9999之间的数\n");
return 0;
}
else{
if(i>=0&&i<=9999){
for(j=0;j<3;j++){
if(a[j]==a[j+1]){
//error();
return 0;
}
}
for(j=0;j<2;j++){
if(a[j]==a[j+2]){
// error();
return 0;
}
}
for(j=0;j<1;j++){
if(a[j]==a[j+3]){
// error();
return 0;
}
}
}*/
else
return 1;
}
void setRecord(char*a,double t) //写入文件记录
{
User use;
use.name =a;
use.score=t;
FILE *fp;
fp=fopen("D:\\timerank.dat","ab");
if(fp==0)
{
printf("写入失败\n");
exit(1);
}
fwrite(&use,sizeof(User),1,fp);
fclose(fp);
}
void sortByName() //储存到文件,排序后输出
{
int choose;
int i,j;
int k=1;
User TempS;/* 定义进行操作时的临时结构体变量 */
User s[10]={};
int recNumber=0;
FILE *fp=NULL;
fp=fopen("D:\\timerank.dat","rb");
/* 将文件中要排序的信息存入结构体数组 */
while(fread(&s[recNumber],sizeof(User),1,fp)!=0)
{
recNumber++;
}
fclose(fp);
for(i=0;i<recNumber-1;i++)
{
for(j=0;j<recNumber-1-i;j++)
{
if((s[j].score>s[j+1].score))
{
/*strcpy(TempS.name,s[j].name);
strcpy(s[j].name,s[j+1].name);
strcpy(s[j+1].name,TempS.name);*/
TempS.name=s[j].name;
s[j].name=s[j+1].name;
s[j+1].name=TempS.name;
TempS.score=s[j].score;
s[j].score=s[j+1].score;
s[j+1].score=TempS.score;
}
}
/* 将排序好的记录写入文件 */
fp=fopen("D:\\timerank.dat","wb");
fwrite(s,sizeof(s),1,fp);
fclose(fp);
}
/* 显示排序后的文件 */
fp=fopen("D:\\timerank.dat","rb");
if(fp==NULL)
{
printf("文件错误\n");
exit(1);
}
printf("*排名\t玩家姓名\t所用时间\n");
while(fread(&TempS,sizeof(User),1,fp)!=0)
{ if(k<6){
printf("%d\t%s\t\t%lf\n",k++,TempS.name,TempS.score);
}
}
fclose(fp);
printf("\n\n");
//printf(" -------1. 返回上一级-------\n\n");
printf(" -------1. 返回主菜单-------\n\n");
printf(" -------2. 退出游戏(任意键退出)-------\n\n");
printf(" (请按键选择,回车确定) \n\n");
scanf("%d",&choose);
switch(choose){
//case 1:startGame();
// break;
case 1:menu();
break;
case 2:exitGame();
break;
default:exitGame();
break;
};
}
int main()
{
menu();
return 0;
}
请问为什么会这样
C语言小游戏相关问题,猜测两次后查询成绩排行榜,然后继续猜测并查询成绩排行榜,则排行榜显示为空
阅读全文
0 0
- C语言小游戏相关问题,猜测两次后查询成绩排行榜,然后继续猜测并查询成绩排行榜,则排行榜显示为空
- C语言- 猜测数字小游戏
- 排行榜
- 排行榜
- 语言排行榜
- 语言排行榜
- C 语言 武功秘籍排行榜
- 编程语言流行排行榜
- 编程语言排行榜
- 编程语言排行榜
- 编程语言排行榜
- 开发语言排行榜
- 开发语言排行榜
- 09编程语言排行榜
- 世界编程语言排行榜
- 目前编程语言排行榜
- 最新编程语言排行榜
- 编程语言排行榜
- 1060. 爱丁顿数(25)
- 【数据库】实验一
- MySQL 存储过程中的游标使用
- 【软考】纠错1-3
- 结构体
- C语言小游戏相关问题,猜测两次后查询成绩排行榜,然后继续猜测并查询成绩排行榜,则排行榜显示为空
- 1061. 判断题(15)
- C
- JAVA课程3 1!到10!
- HTTP请求中的form data和request payload的区别等(转载)
- JVM内存原理,weblogic内存的调优
- 1062. 最简分数(20)
- 徐登沿的第一个程序
- 设计模式之----观察者模式(Listview刷新原理分析)