帮帮修改C语言程序的代码

/*
编写一个猜数字游戏,有一定的 容错功能。规则
A,一个四位数,各位上的数字不重复,从1-9
B,按以下提示猜出这4位数
C,每次猜测输入的数据给出类似的提示*A*B
D,其中A前*代表你本次猜对了多少个数字
E,其中B钱的*代表本次猜对的数字并且位置正确的个数
*/

#include<stdio.h>
#include<stdlib.h>
#include <time.h>
int main()
{
time_t t;
srand((unsigned) time(&t));
int P[10];
int a[4],c[4],i,j,m,n,k;
int flag = 0;
for (i = 0;i < 10;i++)
{
P[i] = 0;
}
for (i = 0;i < 4;i++)
{
while (1)
{
a[i] = rand()%10;
if (P[a[i]] == 0)
{
P[a[i]] = 1;
break;
}
}
}
//printf("答案:%d%d%d%d\n",a[0],a[1],a[2],a[3]);

for (k=0;(k<=10)&&(n!=4);k++)
{
printf("请输入 4 个 0~9之间各不相同的数字:\n");
scanf("%d%d%d%d",&c[0],&c[1],&c[2],&c[3]);
flag = 0;
for (i = 0;i < 3;i++)
{
for (j = 0;j<3;j++)
{
if (i != j&&c[i] == c[j])
{
flag = 1;
}
}
}
if (flag == 1)
{
printf("输入有误,请输入四个不相同的数字\n");
break;
}
n=0;
m=0;
for (i=0;i<=3;i++)
{
if (a[i]==c[i])
{
n++;
}
for (j=0;j<=3;j++)
{
if (a[i]==c[j])
{
m++;
}
}
}
if (n==4)
{
printf("恭喜!回答完全正确!\n");
break;
}
else
printf("%d A\n%d B\n",m,n);
n=0;
}
system("pause");
return 0;
}
/*以上是猜字游戏程序的代码,但为了需要进一步完善其功能的实现:当用户在键入非法字符时系统自行报错,此时希望通过回车键继续进行猜字的继续运行。
还有在用户想知道答案时,希望通过按某一键而调试答案的出现,希望哪位能帮我实现其功能,还有给程序添加一些注释,非常谢谢啊,满意后另加50分酬谢哦

这是我以前自己写个猜数游戏,里面有菜单功能,和你的要求完全一样。你要是要了给你了,改你的太费事了。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 10
int a[M],b[M],c[M];
void menu(void); /*函数声明*/
void help(void);
void game(void);
void testgame(void);

void help(void) /*帮助模块*/
{ printf(" 帮助 \n");
printf(" 猜数游戏中输入一个n位数,系统将输出果mAnB. \n");
printf(" 结果B是输入的数中有几个数字存在答案中,但是\n");
printf(" 位置与答案中位置不一致,它的个数用n表示,A的\n");
printf(" 个数m则表示输入的数中有几个数字存在答案中 \n");
printf(" 且位置也与答案中一致的个数。可以通过测试看\n");
printf(" 看。共有10次推理机会,系统将判断你最终结果。\n");
printf(" 游戏难度表示要推理数的位数。 \n");
printf(" 游戏过程中输入0退出本次游戏。 \n");
printf("\n");
}

void game(void) /*游戏模块*/
{
int n,i,j,cnt=0,temp;
int bn=0,an=0,k;
srand((unsigned)time(NULL));
printf("请选择游戏难度1~4\n");
scanf("%d",&n);
printf("你有10次机会猜这个%d位的随机数\n",n);
for(i=0;i<n;i++) /*生成n位随机数*/
{ loop: temp=c[i]=rand()%10;
if(temp!=0&&i>0)
{for(j=0;j<=i;j++)
if(temp==c[j]) {break; goto loop;}
}
if(temp==0) goto loop;
a[i]=temp;
}
for(k=0;k<10;k++)
{
an=bn=0;
printf("第%d次: ",k+1);
scanf("%d",&cnt);
if(cnt==0) break;
for(i=0;i<n;i++){
temp=cnt%10;
b[n-1-i]=temp;
cnt/=10;
if(cnt==0) break;
}
for(i=0;i<n;i++) /*确定an*/
if(b[i]==a[i]) an++;
for(i=0;i<n;i++) /*确定bn*/
for(j=0;j<n;j++)
if(b[j]==a[i]) bn++;
bn=bn-an;
printf("%dA%dB\n",an,bn);
if(an==n) { printf("棒极了!\n"); break;}
}
if(an>0&&an<n) printf("失败,下次继续努力!\n");
}

void testgame(void) /*测试游戏模块*/
{
int n,i,j,cnt=0,temp;
int bn=0,an=0,k;
srand((unsigned)time(NULL));
printf("请选择游戏难度1~4\n"); /*游戏难度表示要猜数的位数*/
scanf("%d",&n);
printf("你有10次机会猜这个%d位的随机数\n",n);
for(i=0;i<n;i++)
{ loop: temp=c[i]=rand()%10;
if(temp!=0&&i>0)
{for(j=0;j<=i;j++)
if(temp==c[j]) {break; goto loop;}
}
if(temp==0) goto loop;
a[i]=temp;
} /*生成n位随机数*/
printf("答案是:\n");
for(i=0;i<n;i++) printf("%d",a[i]);
printf("\n");
for(k=0;k<10;k++)
{
an=bn=0;
printf("第%d次: ",k+1);
scanf("%d",&cnt);
if(cnt==0) break;
for(i=0;i<n;i++){
temp=cnt%10;
b[n-1-i]=temp;
cnt/=10;
if(cnt==0) break;
}
for(i=0;i<n;i++)
if(b[i]==a[i]) an++;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(b[j]==a[i]) bn++;
bn=bn-an;
printf("%dA%dB\n",an,bn);
if(an==n) { printf("棒极了!\n"); break;}
}
if(an>0&&an<n) printf("失败,下次继续努力!\n");
}

void menu(void) /*菜单模块*/
{
printf(" 逻辑推数游戏! \n");
printf(" $--------------------------------$\n");
printf(" $ 作者: 王博 $\n");
printf(" $--------------------------------$\n");
printf(" $ 1:帮助. $\n");
printf(" $ 2:开始游戏. $\n");
printf(" $ 3:带答案进行游戏测试. $\n");
printf(" $ 4:退出游戏. $\n");
printf(" $--------------------------------$\n");
}

int main(void) /*主函数*/
{ int i;
while(1){
menu();
scanf("%d",&i);
switch(i) {
case 1 : system("cls");help();break;
case 2 : game(); break;
case 3 : testgame();break;
default : break;
}
if(i==4) break;
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-11
好简单哦,多加两个IF不就行了么??
相似回答