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