欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

【C/C++】如何生成隨機數(shù)?帶你深入了解rand函數(shù)-創(chuàng)新互聯(lián)

在湘潭等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站制作 網(wǎng)站設(shè)計制作定制網(wǎng)站設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站制作,湘潭網(wǎng)站建設(shè)費用合理。

目錄

背景

rand()

srand()

時間戳

time()

完整源碼?


背景

當(dāng)我們學(xué)習(xí)完分支與循環(huán)并了解過一點點函數(shù)之后,就可以試著編寫代碼實現(xiàn)一個簡易的猜數(shù)字小游戲了。

游戲方法:電腦生成一個1~100的隨機數(shù),玩家進(jìn)行猜數(shù)字,

我們將游戲的實現(xiàn)封裝在game()函數(shù)中,而第一步,就是讓電腦生成一個隨機數(shù)。

這里我們需要用到一個生成隨機數(shù)的庫函數(shù)rand。

rand()

看不懂沒關(guān)系,我來為大家簡單釋義:

首先是rand函數(shù)的構(gòu)造

int? rand? (void) //函數(shù)返回值為int類型,且無需參數(shù)

它的功能就是生成0~RAND_MAX(32767)的隨機值。RAND_MAX其實就是32767。

然后使用rand函數(shù)之前,別忘了包含它所在的頭文件stdlib.h。

這時我們來測試:

#include#includevoid menu()
{
	printf("*********************************\n");
	printf("**********  1. play  ************\n");
	printf("**********  0. exit  ************\n");
	printf("*********************************\n");
}

//rand函數(shù)可以生成隨機數(shù)
//返回一個0~RAND_MAX(32767)
void game()
{
	int guess = 0;
	//1. 生成隨機數(shù)
	int ret = rand();
	printf("%d\n", ret);
}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("請選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戲\n");
			break;
		default:
			printf("選擇錯誤,重新選擇!\n");
			break;
		}

	} while (input);

我們進(jìn)行簡單的測試后,發(fā)現(xiàn)一下結(jié)果:

隨機數(shù)已經(jīng)成功生成。

我們激動的關(guān)掉程序再來運行一次:

重新啟動代碼以后,我們觀察這些數(shù)字是否有種似曾相識的感覺?

在不就是上次運行的結(jié)果嗎?既然是隨機數(shù),那么完全有相同的可能。那我們不妨再多試幾遍,

會發(fā)現(xiàn),結(jié)果還是一樣的。如果我們只是這樣草率的完成游戲,玩家玩幾次就會覺得無聊了,因為

每次都能猜中,那這是哪里出了問題呢?

請注意:

文檔提示,使用rand函數(shù)之前,我們還得調(diào)用另外一個函數(shù)srand()。

srand()

這是srand函數(shù)的構(gòu)造:

void srand (unsigned int seed);

srand其實是一個隨機數(shù)的生成器,當(dāng)我們給它不同的參數(shù),就能生成不一樣的數(shù)字

例如:

我們發(fā)現(xiàn)果真如此。但是只傳一個固定的參數(shù),我們發(fā)現(xiàn)還是不能完成任務(wù),那么我們就能想

到,是不是給它一個一直變化的值就好了呢?確實是這樣。

那么,在計算機中什么是一直變化的呢?答案是:時間。

我們需要將變化的時間作為srand的參數(shù),但是我們不可能將年月日直接寫進(jìn)去吧。

這里我們了解一個概念叫時間戳。

時間戳

簡單理解,計算機會把時間轉(zhuǎn)換為一串?dāng)?shù)字進(jìn)行存儲,這串?dāng)?shù)字就叫時間戳(單位秒)。每

個不同的時間都對應(yīng)一個時間戳,每個時間戳也只對應(yīng)一個時間。

因此我們把時間戳作為srand的參數(shù)即可,而獲取時間戳,我們又得用到另外一個函數(shù)time().

time()

函數(shù)構(gòu)造:

time_t? ? time? ? (time_t* timer);

我們發(fā)現(xiàn)time()需要的參數(shù)為指針類型的參數(shù),由于目前沒接觸指針,我們只需要將NULL(空指

針)作為參數(shù)即可。另外,別忘記包含頭文件time.h。

整理一下:

這是game函數(shù)應(yīng)該這樣寫:

void game()
{
	srand((unsigned int)time(NULL));//srand所需參數(shù)為unsigned int類型,這里用到了強制類型轉(zhuǎn)換
	int guess = 0;
	//1. 生成隨機數(shù)
	int ret = rand();
	printf("%d\n", ret);
}

我們再來測試:

這次已經(jīng)得到我們想要的結(jié)果了。但是卻并不完美,因為我們發(fā)現(xiàn)每次生成的隨機數(shù)都很相近,其實,當(dāng)我們手速足夠快時,完全可以達(dá)到相同的結(jié)果:

這里的原因不難理解,計算機的時間是一秒一秒走的,所以轉(zhuǎn)換出來的時間戳也是每次差一點。當(dāng)我們在時間戳變換前多次獲取隨機值那么就會產(chǎn)生相同的結(jié)果。

其實,這里錯在我們將srand函數(shù)放錯位置了。每次程序運行時,我們只需要設(shè)置一次隨機數(shù)的起點就夠了,保證與下一局游戲數(shù)字不重復(fù)就行。

所以我們將srand的調(diào)用放置在main函數(shù)里,因為一個程序,main函數(shù)只會執(zhí)行一次。

到此,我們在以后需要生成隨機數(shù)時,只需要這套流程即可。

接下來,我們只需要繼續(xù)完善游戲代碼即可,這里就不做贅述。想了解游戲邏輯的小伙伴可以參照我的上一篇博客手撕三子棋。

完整源碼?
#define _CRT_SECURE_NO_DEPRECATE 1
// 猜數(shù)字游戲?qū)崿F(xiàn)

//電腦隨機生成一個1~100之間的數(shù)字
//猜數(shù)字
//如果你猜小了,告知猜小了
//如果你猜大了,告知猜大了
//如果你猜對了,告知猜對了

#include#includevoid menu()
{
	printf("*********************************\n");
	printf("**********  1. play  ************\n");
	printf("**********  0. exit  ************\n");
	printf("*********************************\n");
}

//rand函數(shù)可以生成隨機數(shù)
//返回一個0~RAND_MAX(32767)
void game()
{
	int guess = 0;
	//1. 生成隨機數(shù)
	int ret = rand()%100+1;//0~99-->1~100
	//printf("%d\n", ret);
	
	//2. 猜數(shù)字
	while (1)
	{
		printf("請猜數(shù)字:>");
		scanf("%d", &guess);
		if (guess< ret)
		{
			printf("猜小了\n");
		}
		else if (guess >ret)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜對了\n");
			break;
		}
	}
}

int main()
{
	int input = 0;
	//設(shè)置隨機數(shù)的生成器
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("請選擇:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戲\n");
			break;
		default:
			printf("選擇錯誤,重新選擇!\n");
			break;
		}

	} while (input);

	return 0;
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁標(biāo)題:【C/C++】如何生成隨機數(shù)?帶你深入了解rand函數(shù)-創(chuàng)新互聯(lián)
URL鏈接:http://www.chinadenli.net/article24/dhcgce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站網(wǎng)站設(shè)計微信小程序面包屑導(dǎo)航App開發(fā)網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)