2013年5月15日 星期三

[C]猜數字參考解答

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
以上三個標頭檔
stdio.h 包含I/O的函數
stdlib.h 包含控制(system("pause"))以及亂數產生(rand())
time.h 對時間日期有關函數的
*/

//phototype 宣告有個函數叫做anwser_check,有兩個參數,且都是int型態
int answer_check(int,int);

//definition 定義answer_check函數的內容
int answer_check(int correct_answer,int user_answer)	
//第一個參數是正確答案,第二個參數是使用者的答案
{
	if(correct_answer==user_answer)	
		//如果兩者答案相符
		return 0;	
		//就傳回0
	else	
		//否則
	{
		if(correct_answer > user_answer)	
		//如果正確答案比使用者答案大
			return 1;	
		//就傳回1
		if(correct_answer < user_answer)	
		//如果確答案比使用者小
			return 2;	
		//就傳回2
	}
}
void main(void)
{
	for(;;){	
	//用無窮迴圈把遊戲整個包住
		char play=0;	
		//假設一個字元變數叫play(之後用來控制要不要繼續完),先初始化為0
		srand(time(NULL));	
		//srand是亂數種子的函數,控制亂數產生因子,這邊利用time()當因子,他回傳回從1970年1月1日0點0分0秒後過了幾秒
		int number=1+rand()%100,ueser_answer,guess_time=1;	
		//宣告number=1~100的亂數,user_answer,guess_time共三個變數
		printf("I have a number between 1 and 100.\n");
		printf("Can you guess my number ?\n");
		printf("Please type your first guess >");
		scanf("%d",&ueser_answer);	
		//給使用者輸入答案
		while(answer_check(number,ueser_answer))	
		//call函數,把正確答案跟使用者答案丟入,並利用其傳回值控制while,當while()括弧中為ture(數字>0)會持續執行,為false(=<0)就停止
		{
			if(answer_check(number,ueser_answer) == 1)	
			//當傳回1就根據剛剛函數的運作來提示太大或太小
				printf("Too low. Try again.");
			if(answer_check(number,ueser_answer) == 2)	
			//當傳回1就根據剛剛函數的運作來提示太大或太小
				printf("Too high. Try again.");
			printf("\nPlease type your new answer >");
			scanf("%d",&ueser_answer);
			guess_time++;
		}
		printf("Excellent !! You gessed the number %d\n",number);
		printf("You try %d times\n",guess_time);
		printf("Would you like to play again? [Y/N]\n");
		/*
		控制在玩一次的方法
		利用getchar()抓取鍵盤所輸入的按鈕給play
		加上while控制直到抓取的值是y 或 n (大小寫視為不同字母)後停止抓取
		*/
		while ( play != 'Y' && play != 'y' && play != 'N' && play != 'n')
			 play = getchar();
		if((play=='n')||(play=='N')) break;	
		//判別使用者輸入的結果,輸入n就跳離迴圈結束遊戲
	}
	system("pause");
}

沒有留言:

張貼留言