我正在尝试创建一个生成随机数组的程序,其中两个单元格在给定范围内没有相同的数字。
示例:要求它创建一个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;
}
我知道我的问题与指针有关,但我不太清楚我应该改变什么来使它工作。有什么帮助吗?
答案 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