天天看點

C語言——猜數字小遊戲詳解 如何用rand,srand,time來完成随機數發生C語言——猜數字小遊戲

C語言——猜數字小遊戲

如何用rand,srand,time來完成随機數發生

這是這款小遊戲的簡單玩法。期待着與你一同完善,改進這個小遊戲!

接下來我們看一下如何來實作這樣一個遊戲。

縱觀這個遊戲,我們發現,這個遊戲的難點其實就是如何生成一個随機數。

生成随機數我們這裡用到了三個個函數分别是:

  • rand()

  • srand()

  • time()

由于生成随機數是我們這個遊戲的核心,我們把這三個函數在這裡細講一下

int rand()

頭檔案:stdlib.h

定義:srand() 播種 rand() 所用的僞随機數生成器。若在任何對 srand() 的調用前使用 rand() ,則 rand() 表現如同它以 srand(1) 播種。每次以 srand() 播種 rand() 時,它必須産生相同的值數列。

傳回值:傳回 ​0​ 與 RAND_MAX 間的随機整數值(包含 0 與 RAND_MAX )。

void srand( unsigned seed )

頭檔案:stdlib.h

定義:以值 seed 播種 rand() 所用的随機數生成器。若在任何到 srand() 的調用前使用 rand() ,則 rand() 表現為如同它被以 srand(1) 播種。每次以同一 seed 播種 rand() 時,它必須産生相同的值數列。

傳回值:無

是不是聽了之後很懵逼?沒關系,請看下面的例子

//大家可以用自己的編譯器反複運作下面的代碼,可以發現,每次産生的五個數都是一樣的。
#include<stdio.h>
#include<stdlib.h>
int main() {
    int x = 0;
    int test = 5;
    int i = 0;
    i = test;
    //srand(1);//不寫srand函數是預設srand内參數為1
    while (i--) {
        x = rand()%10 + 1;
        printf("%d ", x);
    }
    printf("\n");
}
           
//這時候我們調用srand函數并且改變參數,再次觀察産生的随機序列,會發現這次的五個數和之前的不同了
#include<stdio.h>
#include<stdlib.h>
int main() {
    int x = 0;
    int test = 5;
    int i = 0;
    i = test;
    srand(2);
    while (i--) {
        x = rand() % 10 + 1;
        printf("%d ", x);
    }
    printf("\n");
}
//這就說明了srand内的參數可以讓rand函數産生不同的序列,但是這些序列并不是随機的。
//如果我們要産生随機數,就必須不斷改變srand函數内的參數,這時我們就需要引入time函數。
           

time_t time( time_t *arg )

頭檔案:time.h

定義:傳回編碼成 time_t 對象的目前月曆時間,并将其存儲于 arg 指向的 time_t 對象(除非 arg 為空指針)

參數:arg - 指向将存儲時間的 time_t 對象的指針,或空指針

傳回值:成功時傳回編碼成 time_t 對象的目前月曆時間。錯誤時傳回 (time_t)(-1) 。若arg不是空指針,則傳回值也會存儲于 arg 所指向的對象。

需要注意的是,在我的32位的vs2019編譯器上,time_t的類型是long long

對于time的用法請看下例

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
    time_t t1, t2;
    t1 = time(NULL);//傳入空指針,需要用t1接收傳回的時間
    time(&t2);//傳入指針,目前的時間戳寫入t2
    printf("%lld\n",t1);
    printf("%lld\n",t2);
}
//兩個printf輸出的數相同
           

綜上所述,我們把time函數傳回的随時變化的時間戳(從1970年1月1日至今)當作srand函數的參數,這樣就可以讓rand每次産生的數列都是不同的,随機的

切記要在使用rand函數前先調用srand函數哦!

它們組合起來怎麼寫呢?我們可以這麼來寫:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
    srand((unsigned)time(NULL));//關注一下srand函數的參數類型
    int i = 0;
    int random = 0;
    for (; i < 5; i++) {
        random = rand();
        printf("%d ", random);
    }
}
           

想必大家看到了我的程式還有一個讓你選擇猜數範圍的功能,那麼它又是怎麼實作的呢?

其實也很簡單,核心就是求餘

假如你想猜數的範圍是1~10

rand函數産生數是随機數,用

rand() % 10

得到的範圍是 0~9 那就再給它加上1就好了,其他範圍都是這個道理

猜數字遊戲完整源代碼(連結跳轉的我的github上)

可以star一下我哦~友善下次檢視

本文的所有代碼(連結跳轉的我的github上)

以上就是本次的内容,還望各位不吝賜教,謝謝!

長按二維碼關注我的微信公衆号,最新的文章都會先在這裡釋出,更多幹貨等着你!

C語言——猜數字小遊戲詳解 如何用rand,srand,time來完成随機數發生C語言——猜數字小遊戲

繼續閱讀