例题4-2 uva 489 - Hangman Judge

背景:wa一次,没有检查是否已经输了或者赢了,及时退出循环。。。发现在一种情况就是比如cheese       asdfasdfsfcheese  这样也会被判赢,,才发现是没有及时推出。。。

学习:对于一个程序来说,最重要的是先搭好整个程序的框架,将必要的功能函数写上,内部内容可以等一会在实现,框架先搭起来,使用自顶向下的顺序。

还有就是对于这种题目来说要在已经有了结果的时候懂得及时退出并输出结果。。。。。不能等到整个循环结束,不然会影响结果。。

#include<stdio.h>
#include<string.h>
char ans[101],out[101];
int win,lose;
int left,chance;
void guess(char ch)
{
	int i;
	int flag=0;
	for(i=0;i<strlen(ans);i++)
	{
		if(ans[i]==ch)
		{
			ans[i]=' ';
			left--;
			flag=1;
		}
	}
	if(!flag)
	chance--;
	if(!chance)
	lose=1;
	if(!left)
	win=1;
}
int main ()
{
	int n;
	while (scanf("%d",&n)==1 && n!=-1)
	{
		scanf("%s%s",ans,out);
		chance=7;
		win=lose=0;
		left=strlen(ans);
		int i;
		for(i=0;i<strlen(out);i++)
		{
			guess(out[i]);
			if(win||lose) break;           //这里要及时检查是否游戏已经结束 要及时退出不然会影响游戏结果 
		}
		if(win)         //像如果没有及时退出  就有可能 lose=1 win=1 同时存在  无法得知哪个先      就比如输入 cheese       asdfasdfcheese  这样本该是lose 也变为win 
		printf("Round %d\nYou win.\n",n);
		else if(lose)
		printf("Round %d\nYou lose.\n",n);
		else printf("Round %d\nYou chickened out.\n",n);
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值