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