Я пытаюсь создать программу, которая генерирует массив случайных чисел, в котором нет двух ячеек, содержащих одно и то же число в заданном диапазоне.

Пример: запрос на создание массива из 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;
}

Я понимаю, что моя проблема связана с указателями, но я не совсем уверен, что мне следует изменить, чтобы она работала. Любая помощь?

-1
Electric Coffee 10 Сен 2014 в 17:23

4 ответа

Лучший ответ

Вы инициализируете arr [num] как

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

Это должно быть похоже

int arr[num]; ////array of integers
1
Haris 10 Сен 2014 в 13:32

Одна из возможных проблем заключается в том, что вы объявляете свой массив как указатель на массив

int* arr[num];

Это то же самое, что:

int ** arr;

Вы действительно должны использовать

int arr[num];

Поскольку вы ожидаете массив в своих функциях.

1
Tobias Meyer 10 Сен 2014 в 13:33

Я думаю что:

 int* arr[num];

Это не то, что вы хотите. Пытаться

 int arr[num];

(Обратите внимание, что это не законный C до C99)

1
John Hascall 10 Сен 2014 в 13:38

Выражение:

(rand() % high - low) + low

Выглядит подозрительно, поскольку он такой же, как rand() % high.

Вы имеете в виду:

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

?

0
Maxim Egorushkin 10 Сен 2014 в 13:25