随机数生成器生成错误的数字集

时间:2014-09-10 13:23:55

标签: c arrays pointers random

我正在尝试创建一个生成随机数组的程序,其中两个单元格在给定范围内没有相同的数字。

示例:要求它创建一个4的数组应该产生类似于:4 2 1 3的内容,而不是我得到的是:4 2 1360726912 245694014

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

#define TRUE 1
#define FALSE 0

// generates a random number within a given range
int random(int from, int to) {
  int 
    high = to + 1,
    low = from;

  return (rand() % high - low) + low;
}

// returns a random number different from any number in the array
int gen_different(int arr_len, int arr[]) {
  int rand_val = random(1, arr_len);
  int matches = FALSE;
  for(int i = 0; i < arr_len; i++) {
    if(rand_val == arr[i]) matches = TRUE;
  }

  if(matches) gen_different(arr_len, arr);
  return rand_val;
}

// generates an array with a given number of cells, containing all different numbers
void gen_arr(int count, int arr[]) {
  for(int i = 0; i < count; i++)
    arr[i] = gen_different(count, arr);
}

int main() {
  srand(time(NULL));
  printf("Please enter an array number: ");
  int num = 0;
  scanf("%d", &num);
  int* arr[num];
  gen_arr(num, arr);

  for(int i = 0; i < num; i++) {
    printf("%d ", arr[i]);
  }

  printf("\n");
  return 0;
}

我知道我的问题与指针有关,但我不太清楚我应该改变什么来使它工作。有什么帮助吗?

4 个答案:

答案 0 :(得分:1)

我认为:

 int* arr[num];

不是你想要的。尝试

 int arr[num];

(注意这不是C99之前的合法C)

答案 1 :(得分:1)

您正在将arr [num]初始化为

int* arr[num]; //array of pointers to integers

它应该像

int arr[num]; ////array of integers

答案 2 :(得分:1)

一个可能的问题是您将数组声明为指向数组的指针

int* arr[num];

这与:

相同
int ** arr;

你应该实际使用

int arr[num];

正如您期望在函数中使用数组。

答案 3 :(得分:0)

表达式:

(rand() % high - low) + low

看起来很可疑,因为它与rand() % high相同。

你的意思是:

(rand() % (high - low)) + low