C - 我的代码在一个文件中工作但在另一个文件中工作

时间:2015-11-05 18:22:22

标签: 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|

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

内存中为您的值数组保留了随机值。它按照预期的方式工作。但是,您正在使用它不想处理的数据。

尝试在改组之前初始化您的values数组。例如:

for (i = 0; i < max_value; ++i){
    array[i] = i;
}