C rand()函数不生成随机数

时间:2015-07-10 21:43:05

标签: c random numbers

我是编程新手。我需要能用C生成随机数的东西。我发现" rand()"。但它不会产生随机值。请检查以下简单代码。

以下代码给出了

roll the first dice : 6
roll the second dice : 6
roll the third dice : 5

以下是代码:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>


int main()
{

  int dice1,dice2,dice3,total1,total2;
  char prediction[10];

int dice_generator()
{
  dice1= (rand()%6)+1;
  printf("roll the first dice: %d \n", dice1);
  dice2= (rand()%6)+1;
  printf("roll the second dice: %d \n", dice2);
  dice3= (rand()%6)+1;
  printf("roll the third dice: %d \n", dice3);

  return 0;
}

  dice_generator();
  total1 = dice1+dice2+dice3;
  printf("final value is = %d\n",total1);
  return 0;
}

3 个答案:

答案 0 :(得分:8)

你需要&#34;种子&#34;随机数发生器。 尝试拨打

srand(time(NULL));

一旦在您的计划的顶部。

(有更好的方法,但这应该让你开始。)

答案 1 :(得分:2)

首先,C语言不支持嵌套函数。在代码中定义dice_generator()内的main()是非法的。您的编译器可能支持此功能,但无论如何这不是C。

其次,rand()不会生成随机数。 rand()会产生一种看似不稳定的&#34;但完全确定的整数序列,从一些初始数开始,始终遵循相同的路径。你所能做的就是让rand()从不同的种子中开始它的序列&#34;使用新种子作为参数调用srand编号。

默认情况下,rand()需要像调用srand(1)一样才能播放序列。

答案 2 :(得分:0)

这里是代码,经过修正后子函数dice_generator()

被正确分开,而不是埋在main()中。 (在C中,不允许嵌套函数)

通过srand()函数正确初始化rand()函数。

未使用的变量(total2和prediction [])被注释掉

(每行只放置一个变量声明的另一个很好的理由)

强烈建议在编译时启用所有警告,

所以你的编译器可以告诉你代码中的问题。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>

// prototypes
int dice_generator( void );

 // global data
 int dice1;
 int dice2;
 int dice3;
 int total1;
 //int total2;
 //char prediction[10];

int main( void )
{

  srand(time( NULL ));
  dice_generator();
  total1 = dice1+dice2+dice3;
  printf("final value is = %d\n",total1);
  return 0;
} // end function: main


int dice_generator()
{
  dice1= (rand()%6)+1;
  printf("roll the first dice: %d \n", dice1);
  dice2= (rand()%6)+1;
  printf("roll the second dice: %d \n", dice2);
  dice3= (rand()%6)+1;
  printf("roll the third dice: %d \n", dice3);

  return 0;
} // end function: dice_generator