例题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;
}

你可能感兴趣的:(例题4-2 uva 489 - Hangman Judge)