这个程序老是出错,谁能帮我改一下啊? 谢谢谢谢谢谢谢

keketian521 2010-12-25 11:20:19
这个程序老是出错,谁能帮我改一下啊? 谢谢谢谢谢谢谢!


#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<windows.h>
#include<string.h>

#define MAX 6
void read();

typedef struct player
{
char Name[20]; /*玩家姓名 */
int Score; /*玩家成绩,猜测次数 */
} PLAYER;

int qushu() /*取数函数*/
{
int a=0; int b=0;
int i=0;

srand( (unsigned)time( NULL ) ); /*随机数种子设置 */
a=rand();
while (a<999||a>10000)
a=rand();
return(a);
}

void guess()
{
void addrec(int a);
int s[5],dns; /*存放电脑随机产生的数*/
int t[5],sc; /*存放玩家输入的数*/
int i,j;
int a,b; /* a位置和数值都正确的个数 b数值正确位置不正确的个数 */
int c=0;
char xz;
system("cls");
dns=qushu();
printf("电脑数:%d\n",dns);
s[1]=dns/1000;
s[2]=dns/100%10;
s[3]=dns/10%10;
s[4]=dns%10;

/* 输入一个随机的四位数 */
/* 猜这个四位数 */
//printf("\n从0~9中选择4个不重复的数:\n ");
printf("(你只有10次猜的机会)\n");
while (c<10&&a<4)
{
a=0;b=0;
printf("请玩家输入是一个四位数:\n");
scanf("%d",&sc);
while(sc<1000||sc>9999)
{
printf("请玩家输入是一个四位数:\n");
scanf("%d",&sc);
}
c++;
t[1]=sc/1000;
t[2]=sc/100%10;
t[3]=sc/10%10;
t[4]=sc%10;
for (i=1;i<=4;i++) /* 比较数组s[]和t[] */
{
for (j=1;j<=4;j++)
{
if (s[i]==t[j])
if (i==j)
a++;
else
b++;
}
}


printf("位置和数值正确:%d,数值正确位置错误:%d,已猜%d次.\n",a,b,c);
if (a==4)
{
getchar();
printf("确认要保存记录请按'y',任意键返回...!\n");
scanf("%c",&xz);
if (xz=='y'||xz=='Y') addrec(c);
}
}

}
void addrec(int c) //判断并且增加记录
{
FILE *fp;
char name[10];
PLAYER pl[7];
int i,n=1;
printf("请输入玩家姓:");
scanf("%s",name);
strcpy(pl[1].Name,name);
pl[1].Score=c;
fp=fopen("E:\\record.txt","r");
while (!feof(fp))
{
n++;
fscanf(fp,"%s %d",pl[n].Name,&pl[n].Score);
}
fclose(fp);




void read() //读取记录文件
{
FILE *fp;
fp=fopen("E:\\record.txt","rb");
if(fp==NULL)
{
printf("读取失败");
//初始化
}
else (fread(&pl[i].Name,sizeof(player),MAX,fp))
{ fclose(fp);
printf("%S\n",PLAYER);


}

}


//写入文件
fp=fopen("E:\\record.txt","w");
if (n>5) n=5;
for (i=1;i<n;i++)
fprintf(fp,"%s %d\n",pl[i].Name,pl[i].Score);

fclose(fp);

}


void main()
{
int xh;
while(1)
{
system("cls");
printf("1 猜数\n");
printf("2 排行榜\n");
printf("0 退出\n");
printf("请输入序号:");
scanf("%d",&xh);
switch(xh)
{
case 1:guess();break;
case 2:read();break;
case 0:exit(0);break;
}
}
}
...全文
80 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
prohibit 2010-12-26
  • 打赏
  • 举报
回复
看懂了~~是把read函数嵌套在addrec函数里实现的……最好放在外面~~
prohibit 2010-12-25
  • 打赏
  • 举报
回复
...
void read() //读取记录文件
{
FILE *fp;
fp=fopen("E:\\record.txt","rb");
if(fp==NULL)
{
printf("读取失败");
//初始化
}
else (fread(&pl[i].Name,sizeof(player),MAX,fp))
{
fclose(fp);
printf("%S\n",PLAYER);
}
}

//这下面一段是咋回事?n从哪里来的?是不是少复制了几句代码啊?
//写入文件
fp=fopen("E:\\record.txt","w");
if (n>5) n=5;
for (i=1;i<n;i++)
fprintf(fp,"%s %d\n",pl[i].Name,pl[i].Score);

fclose(fp);

}
...
無_1024 2010-12-25
  • 打赏
  • 举报
回复

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<windows.h>
#include<string.h>

#define MAX 6
void read();

typedef struct player
{
char Name[20]; /*玩家姓名 */
int Score; /*玩家成绩,猜测次数 */
} PLAYER;

int qushu() /*取数函数*/
{
int a=0; int b=0;
int i=0;
srand( (unsigned)time( NULL ) ); /*随机数种子设置 */
a=rand();
while (a<999||a>10000)
a=rand();
return(a);
}

void guess()
{
void addrec(int a);
int s[5],dns; /*存放电脑随机产生的数*/
int t[5],sc; /*存放玩家输入的数*/
int i,j;
int a,b; /* a位置和数值都正确的个数 b数值正确位置不正确的个数 */
int c=0;
char xz;
system("cls");
dns=qushu();
printf("电脑数:%d\n",dns);
s[1]=dns/1000;
s[2]=dns/100%10;
s[3]=dns/10%10;
s[4]=dns%10;
/* 输入一个随机的四位数 */
/* 猜这个四位数 */
//printf("\n从0~9中选择4个不重复的数:\n ");
printf("(你只有10次猜的机会)\n");
while (c<10&&a<4)
{
a=0;b=0;
printf("请玩家输入是一个四位数:\n");
scanf("%d",&sc);
while(sc<1000||sc>9999)
{
printf("请玩家输入是一个四位数:\n");
scanf("%d",&sc);
}
c++;
t[1]=sc/1000;
t[2]=sc/100%10;
t[3]=sc/10%10;
t[4]=sc%10;
for (i=1;i<=4;i++) /* 比较数组s[]和t[] */
{
for (j=1;j<=4;j++)
{
if (s[i]==t[j])
if (i==j)
a++;
else
b++;
}
}
printf("位置和数值正确:%d,数值正确位置错误:%d,已猜%d次.\n",a,b,c);
if (a==4)
{
getchar();
printf("确认要保存记录请按'y',任意键返回...!\n");
scanf("%c",&xz);
if (xz=='y'||xz=='Y') addrec(c);
}
}
}
PLAYER pl[7];
void read() //读取记录文件
{
FILE *fp;
fp=fopen("E:\\record.txt","rb");
if(fp==NULL)
{
printf("读取失败");
//初始化
}
else (fread(&pl[1].Name,sizeof(player),MAX,fp));///--------这个地方是啥意思啊
{
fclose(fp);
//printf("%S\n",PLAYER); //输出没有重载不能直接使用
}
}


void addrec(int c) //判断并且增加记录
{
FILE *fp;
char name[10];

int i,n=1;
printf("请输入玩家姓:");
scanf("%s",name);
strcpy(pl[1].Name,name);
pl[1].Score=c;
fp=fopen("E:\\record.txt","r");
while (!feof(fp))
{
n++;
fscanf(fp,"%s %d",pl[n].Name,&pl[n].Score);
}
fclose(fp);
read();
//}//少一个括号




//写入文件
fp=fopen("E:\\record.txt","w");
if (n>5) n=5;
for (i=1;i<n;i++)
fprintf(fp,"%s %d\n",pl[i].Name,pl[i].Score);

fclose(fp);

}


void main()
{
int xh;
while(1)
{
system("cls");
printf("1 猜数\n");
printf("2 排行榜\n");
printf("0 退出\n");
printf("请输入序号:");
scanf("%d",&xh);
switch(xh)
{
case 1:guess();break;
case 2:read();break;
case 0:exit(0);break;
}
}
}


//现在程序运行没错 但是我个人认为逻辑有错 自己好号看看吧
//关键就是那个函数嵌套的问题 不能在嵌套里面实现函数的定义 而应该放在外面 还有就是文件操作的一些
//细节

69,371

社区成员

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

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