数组C中的随机数

时间:2017-10-10 20:56:18

标签: c random

我试图在数组大小的范围内生成一个随机数,并从数组中打印随机元素然后返回索引 这样的元素。这就是我到目前为止所拥有的。代码无效。有人可以帮帮我吗?

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

srand ( time(NULL) );
int myArray[11] = { 4,8,2,5,9,1,7,10,43,23,3 };
int randomIndex = rand();
int randomValue = myArray[randomIndex];
printf("Reference: %d\n", randomValue);

2 个答案:

答案 0 :(得分:1)

首先,您的代码似乎在函数之外,因此请将其包装起来,例如函数main

其次,函数rand返回0到RAND_MAX之间的伪随机整数值,该值通常远高于数组大小11。 因此,您很有可能超出数组范围。

randomIndex限制为11,例如通过使用modulo:

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

int main() {
    srand ( time(NULL) );
    int myArray[11] = { 4,8,2,5,9,1,7,10,43,23,3 };
    int randomIndex = rand() % 11;
    int randomValue = myArray[randomIndex];
    printf("Reference: %d\n", randomValue);
    return 0;
}

请注意,模数(即%11)是一种非常简单的数字上限方法,它会产生随机值的非均匀分布。如果出现问题,请不要犹豫再次询问。

答案 1 :(得分:-1)

rand() generates a value between 0 and RAND_MAX,您应将其限制为数组长度,例如here

const int N = 11; // length of myArray
int randomIndex = rand() / (RAND_MAX / N + 1);