C语言猜拳小游戏程序求助

作业要求编个猜拳小游戏,编得渣渣,各种bug,1.最后的比较最终胜负出现了垃圾值,2.输入q的时候游戏无法结束3.要输入第四次才出最终结果的判断,为什么不是比了第三次之后... 作业要求编个猜拳小游戏,编得渣渣,各种bug,
1.最后的比较最终胜负出现了垃圾值,
2.输入q的时候游戏无法结束
3.要输入第四次才出最终结果的判断,为什么不是比了第三次之后就直接出最终结果?
程序如下:
//这是一个猜拳小游戏,三局两胜制
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int get_int(void); //规范输入的函数
int game(int y,int x); //游戏函数
int result(int m,int n); //比较最终结果的函数
main()
{
int x,y,m,n;
int k = 1;
char q;
printf("1代表石头;2代表剪刀;3代表布;按q退出。\n");
printf("请输入您的选择.\n");
while((y = get_int())!= 'q'&&k<4)
{
k++;
game(y,x);
}
result(m,n);
return 0;
}

int get_int(void)
{
int y;
char ch;

while (scanf("%d", &y)!= 1||y>3)
{
while ((ch = getchar()) != '\n')
putchar(ch); //剔除错误的输入
printf("不是正确的命令,请输入正确的形式,1或2或者3:\n");
}
return y;
}

int game(int y,int x)
{
int m = 0; //玩家赢的次数
int n = 0; //电脑赢的次数

srand(time(NULL));
x = rand()%3+1; //取随机数1~3

if(y==1&&x==3)
{
printf("你出石头\n");
printf("电脑出布\n");
printf("你输了\n");
++n; //电脑赢的次数
}
else if(y==1&&x==1)
{
printf("大家都出石头,平局\n");
++m;
++n;
}
else if(y==1&&x==2)
{
printf("你出石头\n");
printf("电脑出剪刀\n");
printf("你赢了\n");
++m; //玩家赢的次数
}
if(y==2&&x==1)
{
printf("你出剪刀\n");
printf("电脑出石头\n");
printf("你输了\n");
++n;
}
else if(y==2&&x==2)
{
printf("大家都出剪刀,平局\n");
++m;
++n;
}
else if(y==2&&x==3)
{
printf("你出剪刀\n");
printf("电脑出布\n");
printf("你赢了\n");
++m;
}
if(y==3&&x==1)
{
printf("你出布\n");
printf("电脑石头\n");
printf("你赢了\n");
++m;
}
else if(y==3&&x==2)
{
printf("你出石头\n");
printf("电脑出剪刀\n");
printf("你输了\n");
++n;
}
else if(y==3&&x==3)
{
printf("大家都出布,平局\n");
++m;
++n;
}
return m,n; //返回m,n的值
}

int result(int m,int n) //比较最终结果
{
if(m<n)
printf("3局%d胜,你输了.\n",m);
else if(m>n)
printf("3局%d胜,你赢了.\n",m);
else if(m==n)
printf("一胜一负一平局,旗鼓相当。\n");
return 0;
}
展开
 我来答
495006387
推荐于2017-12-16 · TA获得超过338个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:264万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int get_int(void); //规范输入的函数
int game(int y,int x); //游戏函数
int result(int m,int n); //比较最终结果的函数
int main()
{
int x,y,m,n;
int k = 0;
char q;
printf("1代表石头;2代表剪刀;3代表布;\n");
printf("请输入您的选择.\n");
while(k<3)
{
scanf("%d", &y);
k++;
game(y,x);
}
result(m,n);
system("pause");
return 0;
}
int game(int y,int x)
{
int m = 0; //玩家赢的次数
int n = 0; //电脑赢的次数
srand(time(NULL));
x = rand()%3+1; //取随机数1~3
if(y==1&&x==3)
{
printf("你出石头\n");
printf("电脑出布\敬唯n");
printf("你输了\n");
++n; //电脑赢的次数
}
else if(y==1&&x==1)
{
printf("大家都出石头,平兆晌局\n");
++m;
++n;
}
else if(y==1&&x==2)
{
printf("你出石头\n");
printf("电脑出剪刀\n");
printf("你赢了\n");
++m; //玩家赢的次数
}
if(y==2&&x==1)
{
printf("你出剪刀\n");
printf("电脑出石头\n");
printf("你输了\n");
++n;
}
else if(y==2&&x==2)
{
printf("大家都出剪刀,平局\n");
++m;
++n;
}
else if(y==2&&x==3)
{
printf("你出剪刀\n");
printf("电脑出布\n");
printf("你赢了\n");
++m;
}
if(y==3&&x==1)
{
printf("你出布\n");
printf("电脑石头\n");
printf("亮猜培你赢了\n");
++m;
}
else if(y==3&&x==2)
{
printf("你出石头\n");
printf("电脑出剪刀\n");
printf("你输了\n");
++n;
}
else if(y==3&&x==3)
{
printf("大家都出布,平局\n");
++m;
++n;
}
return m,n; //返回m,n的值
}
int result(int m,int n) //比较最终结果
{
if(m<n)
printf("3局%d胜,你输了.\n",m);
else if(m>n)
printf("3局%d胜,你赢了.\n",m);
else if(m==n)
printf("一胜一负一平局,旗鼓相当。\n");
return 0;
}//改好了,直接比较三次出结果就行了呀!最后暂停查看下system("pause");
道祖一鸿钧
2013-05-10 · 超过21用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:21万
展开全部
在你这个程序中,你是先闹兆顷输入在判断是否合法! while((y = get_int())!= 'q'&&k<4)
所以你只有第四次输入才会判断k是否大于4,这就是你为什么液陆猜禅有输四次了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式