逻辑没看。
你既然用到time函数,头文件应该导入time.h.
建议少用goto,按照你的代码结构,可以简化。以下参照你的代码改的:
#include
#include
#include
#define maxNum 30 //最大叫数值
int Cg(int c);
int Hg(int c);
int Rn();
int main()
{
int c=0,n;
while(1)
{
printf("请选择谁先叫数(1、玩家;2、电脑):");
scanf("%d",&n);
if(n!=1 && n!=2)
printf("输入错误,重新输入!\n");
else
break;
}
while(c<30)
{
switch(n)
{
case 1:c=Hg(c);break;
case 2:c=Cg(c);break;
}
}
return 0;
}
int Rn()
{
int a;
srand(time(NULL));
a=rand()%2+1;
return a;
}
int Hg(int c)//玩家叫数 返回叫数后的累加值 参数:c累加值
{
int i=1,n;
while(1)//输入验证
{
printf("玩家回合,请输入叫数次数(1或者2):") ;
scanf("%d",&n);
if(n!=1 && n!=2)
printf("输入错误,重新输入!\n");
else
break;
}
while(n--)
{
printf(" 玩家第%d次叫数:%d\n",i++,++c);
if(c==maxNum)
{
printf("玩家首先叫到30,玩家胜利!!\n");
return c;
}
}
c=Cg(c);
return c;
}
int Cg(int c)//电脑叫数 返回叫数后的累加值 参数:c累加变量指针,随机值
{
int i=1,a=Rn();
printf("电脑回合,电脑叫数次数:%d\n",a) ;
while(a--)
{
printf(" 电脑第%d次叫数:%d\n",i++,++c);
if(c==maxNum)
{
printf("电脑首先叫到30,电脑胜利!!\n");
return c;
}
}
c=Hg(c);
return c;
}
另外:如果将累加变量c写成公共变量,或者在main中定义c,然后传址,代码还会更简化。
/*两个人从1开始报数,每人每次可报一个数或者连续两个数,谁先报到30,谁为胜方,通过生成一个随机函数决定谁来报数
*电脑报数的原则,余下的数字除以3,余1,则报一个数,余2则报2个数,否则则随机报1个数或者两个数
*/
/*实现电脑和玩家报数*/
void num();
int showbaoshu();
int main()
{
num();
return 0;
}
void num()
{
int i; //用户输入的值
int j=0; //电脑输入的值
srand(time(NULL));
if(rand()%2==0)
{
j++;
printf("由电脑先报数");
printf("电脑报的数为:%d\n",j);
}else{
printf("由玩家先报数:\n");
}
while(1)
{
i= showbaoshu();
if(i>j+2||i
printf("不遵守游戏规则,系统强制退出");
return;
}
if(i>=30)
{
printf("玩家获胜");
break;
}
if(j>=30)
{
printf("电脑获胜");
break;
}
if((30-i)%3==1) //余数为1,生成一个数
{
j= i+1;
printf("%d",j);
continue;
}
if((30-i)%3==2) //余数为2,生成两个数
{
j =i+2;
printf("%d%d",j-1,j);
continue;
}
if((30-i)%3!=2&&(30-i)%3!=1)
{
if(rand()%2==0)
{
j= i+1;
printf("%d",j);
continue;
}else{
j=i+2;
printf("%d%d",j-1,j);
continue;
}
}
}
}
int showbaoshu()
{
int i,j;
printf("请选择要报一个数还是两个数(输入数字1报一个数,输入数字2报两个数)\n");
getch();
if(getch()=='1')
{
printf("请输入你要报的数字");
scanf("%d",&i);
j=0;
fflush(stdin);
}
if(getch()=='2')
{
printf("请输入你要报的数字");
scanf("%d",&i);
printf("请在输入你要报的下一个数字");
scanf("%d",&j);
fflush(stdin);
}
return i>j? i:j;
}