C語言生成隨機數的函數,爲什麼循環後隨機數都一樣?

 代碼如下:

#include <stdio.h>
#include <time.h>
int main(int argc, char **argv) {

	    	 int a ,b;
	    	 char c;
	    	 //time_t tm = time(NULL);//得到系統時間
	    	 srand((unsigned int)time(NULL));//隨機種子只需要設置一次即可
			 int var=0;
			 for (var = 0; var < 10; var++) {
				a = rand();
				b = rand();
				c = getfour_arithmetic_operator();
				fflush(stdout); 
				printf("%d%c%d=\n",a,c,b);
			 }

}

輸出結果如下:

9679/8557=
8557/14412=
8557/14412=
8557/14412=
8557/14412=
8557/14412=
8557/14412=
8557/14412=
8557/14412=
8557/14412=

 

原因如下:

srand()函數是初始化隨機數產生器,它產生隨機數種子,說白了就是初始化隨機數。
srand((unsigned)time(NULL));取的是系統時間,也就是距離1970.1.1午夜有多少秒。
for循環每循環一次時間遠遠小於1秒,這就導致了srand((unsigned)time(NULL))產生的種子並沒有改變。 那麼,相同的隨機數種子所產生的隨機數肯定是一樣的了。

 

如果在循環中加上sleep(1);輸出結果就不一樣了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章