C语言中生成随机数
主要內(nèi)容
- rand()函數(shù)
- 引入時間戳
- 生成1到100隨機(jī)數(shù)
rand()函數(shù)
1.隨機(jī)數(shù)生成用rand(),范圍是0到32767
2.rand()在main主函數(shù)中一次定義賦值必是一樣的數(shù)
#include<stdio.h> #include<stdlib.h>//rand(),srand()等頭文件 int main() {int ret = rand(); int i = 0;do{ printf("%d\n", ret); i++;} while (i<10); }運(yùn)行結(jié)果:
3.由于rand()的隨機(jī)數(shù)生成在兩次運(yùn)行的情況下是相同的,類似同一個劇本殺玩兩次內(nèi)容是一樣的
兩次分別的運(yùn)行結(jié)果
4.所以要使運(yùn)行兩次內(nèi)容不一樣,需要srand(unsigned int):設(shè)置一個隨機(jī)的起點
在main中添加srand(100);
顯示結(jié)果發(fā)生變化
因此
5.srand(unsigned int)括號中也需要一個變化的數(shù)
引入時間戳
時間戳就是現(xiàn)在的時間與一個電腦設(shè)定時間如1970.10.1 10:00:00相差的秒數(shù),是一個不斷變化的數(shù)
用time(NULL)接收放入stand()中
srand((unsigned int)time(NULL));//強(qiáng)制轉(zhuǎn)換一下每次使用前都用srand重新設(shè)置一個起點
#include<stdio.h> #include<stdlib.h> #include<time.h>//time對應(yīng)的頭函數(shù) #include<windows.h>//Sleep()對應(yīng)的頭文件 void test() {int ret = rand(); srand((unsigned int)time(NULL));printf("%d\n", ret); }int main() {int i = 0;do{ test();i++;Sleep(1000);//延遲一秒,用于展示這么寫的漏洞} while (i<10); }運(yùn)行展示
產(chǎn)生的相近數(shù)字由于每次運(yùn)行都用srand重新設(shè)置了一下。并且每次時間間隔相差1秒
因此
srand((unsigned int)time(NULL));//不宜多次使用最后修改
生成10個隨機(jī)數(shù)代碼
生成1到100隨機(jī)數(shù)
由于rand()取值是0到32767
所以rand()取余就是0到99
rand()%100+1 范圍就是1 到 100
//最后生成的10個 1到100隨機(jī)數(shù)代碼 #include<stdio.h> #include<stdlib.h> #include<time.h> void test() {int ret = rand() % 100 + 1; printf("%d\n", ret); }int main() {srand((unsigned int)time(NULL));int i = 0;do{ test();i++;} while (i<10); }總結(jié)
- 上一篇: android 图片轮播带缩略图,超酷响
- 下一篇: C语言-随机数的生成