目錄
思路:
1.電腦産生一個随機數
2.猜數字:a.猜大了 b.猜小了 c.猜中了
分析:
菜單函數:
遊戲函數:
1.産生随機數:
2.而srand函數:
game函數源碼:
源碼:
運作結果截圖:
思路:
1.電腦産生一個随機數
2.猜數字:a.猜大了 b.猜小了 c.猜中了
分析:
菜單函數:
void menu()
{
printf("########################\n");
printf("########1.play#########\n");
printf("########0.Exit#########\n");
}
遊戲函數:
1.産生随機數:
a.需要調用rand函數,rand()%100+1表示的是産生一個在1至100的随機數。
原因:任意一個數對100取餘數結果必小于100,在加上1則是産生100以内的随機數。
如果對rand函數的概念不了解,可以查一下:
編輯
b.由上面這個圖知道rand随機的範圍是0到RAND_MAX,RAND_MAX是7fff(十六進制),轉化為十進制是32767,但是如果你隻是這樣設計的話,你将會發現: 運作這個程式産生随機值後,關閉再運作,會發現兩次運作的結果對應的位置随機相同!!!
如下圖:
編輯
c.如果每一輪對應位置的随機值都相同的話,可能與我們的預期不相同,是以我們需要再修改一下!!!那修改什麼呢?答案在上上個圖:
編輯
就是最後一句話:
Use the srand function to seed the pseudorandom-number generator before calling rand.
意思:調用rand函數前要調用srand函數進行産生随機數生成器。
2.而srand函數:
Sets a random starting point.設定一個随機的起點。
調用它是:srand(unsigned int seed)這裡要放一個時刻變化量,否則産生的随機值是不變的。
編輯
而什麼是時刻可以變化的呢?答案不言而喻,時間呗。
那怎麼輸入一個時間呢?那麼我們需要了解一個給概念:時間戳
編輯
在C語言中有一個函數可以輸出時間戳:time函數
編輯
由此調用scrand函數是這樣的: srand((unsigned int)time(NULL));
而且這個調用要寫在主函數,而不是game函數,因為如果輸入過快,則導緻兩次随機值相同:
編輯
game函數源碼:
void game()
{
int guess = 0;
int ret = rand() % 100 + 1;
printf("%d\n", ret);
while (1)
{
printf("guess the number:");
scanf("%d", &guess);
if (guess > ret)
{
printf("guess a bigger!\n");
}
else if (guess < ret)
{
printf("guess a litter!\n");
}
else
{
printf("Find!\n");
break;
}
}
}
源碼:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void menu()
{
printf("########################\n");
printf("########1.play#########\n");
printf("########0.Exit#########\n");
}
void game()
{
int guess = 0;
int ret = rand() % 100 + 1;
printf("%d\n", ret);
while (1)
{
printf("guess the number:");
scanf("%d", &guess);
if (guess > ret)
{
printf("guess a bigger!\n");
}
else if (guess < ret)
{
printf("guess a litter!\n");
}
else
{
printf("Find!\n");
break;
}
}
}
int main(void)
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("please choose :->");
scanf("%d", &input);
switch (input)
{
case 1:game();
break;
case 2:printf("EXIT\n");
break;
defalut: printf("Choose wrong! again choose!\n");
break;
}
} while (input);
return 0;
}