我有一個函數可以對數組中的元素進行混洗(可能有重複)。我的函數代碼如下:C - 我的代碼在一個文件中工作,但不是另一個
int shuffle_values(int *array, int max_value){
int i, j;
int new_array[MAX_VALUE_ALLOWED];
for (i = 0; i < max_value; ++i){
new_array[i] = array[i];
}
if (max_value > MAX_VALUE_ALLOWED){
return 0;
}else{
for (j = 0; j < max_value; ++j){
array[j] = new_array[(random_value(max_value) - 1)];
}
}return 1;
}
下面是測試我的函數的代碼:
#define MAX_VALUE_ALLOWED 200
int random_value(int max_value){
int rand_val;
rand_val = (rand() % max_value) + 1;
return rand_val;
}
void print_values(int *array, int max_value){
int i;
for (i = 0; i < max_value; ++i){
printf("%d|", array[i]);
} printf("\n");
}
int main() {
unsigned int seed = 20;
int values[MAX_VALUE_ALLOWED], max_value;
srand(seed);
max_value = 8;
shuffle_values(values, max_value);
print_values(values, max_value);
shuffle_values(values, max_value);
print_values(values, max_value);
max_value = 20;
shuffle_values(values, max_value);
print_values(values, max_value);
shuffle_values(values, max_value);
print_values(values, max_value);
return 0;
}
預期輸出是:
5|4|3|1|8|6|7|2|
3|4|7|5|8|2|1|6|
11|7|20|4|9|19|13|12|10|14|6|2|16|1|15|5|8|18|17|3|
6|3|5|9|14|15|20|2|10|11|16|8|7|17|1|19|18|12|4|13|
但我發現了:
32517|-940709567|0|32517|0|0|-938539808|0|
32517|-940709567|-938539808|0|0|-940709567|32517|-940709567|
-940709567|-940709567|32517|32517|-940709567|0|-940709567|0|32767|32767|32517|0|1|0|0|32517|1|0|-940709567|0|
0|-940709567|-940709567|32767|0|0|1|-940709567|32517|32767|32767|-940709567|32517|-940709567|-940709567|1|0|0|32517|-940709567|
但是,當我測試相同代碼在這裏:
#include <stdio.h>
#include <stdlib.h>
#define MAX_VALUE_ALLOWED 200
int random_value(int max_value){
int rand_val;
rand_val = (rand() % max_value) + 1;
return rand_val;
}
int main(){
int max_value = 8;
int array[8] = {1,2,3,4,5,6,7,8};
int i, m;
printf("Original array:");
for (i = 0; i < max_value; ++i){
printf("%d|", array[i]);
}printf("\n");
printf("Shuffled array:");
shuffle_values(array, max_value);
for (m = 0; m < max_value; ++m){
printf("%d|", array[m]);
}printf("\n");
return 0;
}
我得到的輸出是正確的:
Original array:1|2|3|4|5|6|7|8|
Shuffled array:8|7|2|4|2|8|3|5|
有什麼想法?
在第一個例子中,你在哪裏給'values'數組賦值? –
你似乎認爲任何n次連續調用'random_value(n)'都會以某種順序返回從0到n-1的所有值。隨機數字發生器不以這種方式工作。 –
OT:在'shuffle_values'的第一個'for'循環之前檢查'if(max_value> MAX_VALUE_ALLOWED)'是否需要執行*。否則,在達到'if'語句之前,可能會有一個緩衝區溢出。 – user3386109