C語(yǔ)言超詳細(xì)講解猜數(shù)字游戲的實(shí)現(xiàn)
rand函數(shù)
先看一下下面這張圖:

通過(guò)這張圖我們可以了解到rand函數(shù)的返回值是int類(lèi)型,形參為空,它的頭文件<stdlib.h>以及它的返回值范圍是0到RAND_MAX. 而RAND_MAX在VS中是0x7fff,轉(zhuǎn)換成二進(jìn)制就是32767.所以rand返回的隨機(jī)數(shù)的范圍就是0到32727。
其實(shí)我們用rand函數(shù)就可以生成隨機(jī)數(shù)了,那為什么我們還要用到srand函數(shù)呢?
因?yàn)橹挥械谝淮紊傻碾S機(jī)數(shù)是隨機(jī)的,如果程序執(zhí)行多次,那第二次之后生成的隨機(jī)數(shù)就會(huì)和第一次生成的一樣。這是一種偽隨機(jī)。

因此只用到rand函數(shù)是不夠的,我們要用rand函數(shù)之前,先用strand函數(shù)。
srand函數(shù)

看一下strand函數(shù),返回值為void,形參是int類(lèi)型的數(shù)據(jù),要用strand函數(shù),首先要給strand傳一個(gè)int類(lèi)型的數(shù)據(jù),根據(jù)傳進(jìn)去的值不同,生成的隨機(jī)數(shù)也不同。但是這樣就矛盾了。生成一個(gè)隨機(jī)數(shù)之前首先要傳進(jìn)去一個(gè)隨機(jī)數(shù),為了解決這個(gè)問(wèn)題,就要使用時(shí)間戳。
時(shí)間戳

我們無(wú)法給它一個(gè)隨機(jī)數(shù),但是我們可以用時(shí)間作為參數(shù)傳進(jìn)去,時(shí)間是變的,這樣生成的隨機(jī)數(shù)也就是變的。怎么獲得時(shí)間戳呢?C語(yǔ)言也為我們提供了一個(gè)time函數(shù)可以幫助我們獲得時(shí)間戳。

time的頭文件是<time.h>,time的函數(shù)原型有點(diǎn)復(fù)雜,看不懂沒(méi)關(guān)系,會(huì)用就行。我們只是要把time的值作為參數(shù)傳給strand函數(shù)。strand的形參是unsigned int類(lèi)型的,而time的返回值是time_t類(lèi)型的,我們可以強(qiáng)制類(lèi)型轉(zhuǎn)換。time的形參是指針類(lèi)型的參數(shù),我們用NULL就可以了。
srand((unsigned int)time(NULL));
解決完這個(gè)問(wèn)題,我們還要解決rand生成隨機(jī)數(shù)的范圍的問(wèn)題,我們?nèi)绻@得一個(gè)1~N之間的數(shù)的話,就要對(duì)生成的隨機(jī)數(shù)對(duì)N進(jìn)行取余+1.為了方便猜數(shù)字,生成的隨機(jī)數(shù)范圍就控制在1到100.猜數(shù)字不是一次就能才對(duì)的,猜不對(duì)就要一直猜,猜對(duì)了才退出。下面是完整代碼。
完整代碼與程序運(yùn)行圖
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("|-------------------|\n");
printf("|-----1.玩游戲------|\n");
printf("|-----0.退出--------|\n");
printf("|-------------------|\n");
}
void game()
{
int ret = rand()%100+1;
int m = 0;
while (1)
{
scanf("%d", &m);
if (m > ret)
{
printf("猜大了!\n");
}
else if (m < ret)
{
printf("猜小了!\n");
}
else
{
printf("恭喜你,猜對(duì)了!\n");
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));
int n = 0;
do
{
menu();
printf("請(qǐng)選擇:");
scanf("%d", &n);
switch (n)
{
case 1:
printf("開(kāi)始猜數(shù)字\n");
game();
break;
case 0:
printf("已退出\n");
break;
default:
printf("選擇錯(cuò)誤,請(qǐng)重新選擇\n");
break;
}
} while(n);
return 0;
}程序運(yùn)行圖如下:

到此這篇關(guān)于C語(yǔ)言超詳細(xì)講解猜數(shù)字游戲的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C語(yǔ)言猜數(shù)字游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一起來(lái)學(xué)習(xí)C++的動(dòng)態(tài)內(nèi)存管理
這篇文章主要為大家詳細(xì)介紹了C++的動(dòng)態(tài)內(nèi)存管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03
c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn)
本文詳細(xì)講解了c++使用Easyx圖形庫(kù)實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
簡(jiǎn)單總結(jié)C++中的修飾符類(lèi)型
這篇文章主要介紹了C++中的修飾符類(lèi)型總結(jié),是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-05-05
C語(yǔ)言實(shí)現(xiàn)掃雷小項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
利用C++編寫(xiě)簡(jiǎn)易寶可夢(mèng)對(duì)戰(zhàn)小游戲
本文利用C++語(yǔ)言編寫(xiě)了一個(gè)小時(shí)候課間嘴上玩的那種寶可夢(mèng)游戲,只有早期的三個(gè)寶可夢(mèng)和基礎(chǔ)招式,感興趣的朋友快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
C語(yǔ)言實(shí)現(xiàn)數(shù)字連連看
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)數(shù)字連連看游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09

