无法将值正确分配给自定义数据类型矩阵单元格

时间:2015-07-15 15:59:43

标签: c matrix

我已经定义了一个自定义数据类型:

typedef CustomDatatype {
   int id;
   OtherCustomDatatype *p;
} CustomDatatype;

问题是我需要处理2D CustomDatatype**矩阵,我需要正确访问矩阵的单元格并修改id字段。

CustomDatatype **assign_values_to_random_cells(CustomDatatype **matrix, 
const int width, const int n, const int total)
{
    int counter = 0;
    int random_number;
    int i;
    int j;
    int random_value;

    while (counter < n)
    {
        random_number = (rand() % total);
        i = random_number / width;
        j = random_number - (width * i);

        if (perform_a_check(matrix, i, j))
        {
            random_value = random_number%15;
            (*matrix+(random_number))->id = random_value;
            counter++;
        }
        fprintf(stderr, "Counter: %d ", counter);
        fprintf(stderr, "Value: %d ", (*matrix+(random_number))->id);
        fprintf(stderr, "Position %d (%d, %d)\n", random_number, i, j);
    }

    return matrix;
}

因此,此函数会返回比n更少或更多的随机数,这正是我所期望的。 int **矩阵的相同算法工作得很好,所以我想知道我是否以正确的方式访问矩阵单元格。

我试过了:

  • matrix[i][j].id = random_value,除了我期待看到的n之外,还会导致重复值;
  • (*matrix+(cell_number))->id = random_value,导致错误定位的值,绝对不是n;
  • (*(*matrix+(cell_number))).id = random_value与上一项相同。

更新#2:提供扩展输出

Matrix init:
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 


Counter: 0
Position: 32 (2, 10) (Empty cell!) Value: 2
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --   2 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 




Counter: 1
Position: 45 (4, 1) (Empty cell!) Value: 0
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --   2 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 




Counter: 2
Position: 64 (5, 9) (Empty cell!) Value: 4
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --   2 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --   4  -- 
 --   4  --  --  --  --  --  --  --  --  -- 




Counter: 3
Position: 11 (1, 0) (Empty cell!) Value: 11
 --  --  --  --  --  --  --  --  11  --  -- 
 11  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --   2 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --   4  -- 
 --   4  --  --  --  --  --  --  --  --  -- 




Counter: 4
Position: 43 (3, 10) (Empty cell!) Value: 13
 --  --  --  --  --  --  --  --  11  --  -- 
 11  --  --  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --  --   2 
 --  --  --  --  --  --  --  --  --  --  13 
 --  --  13  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --   4  -- 
 --   4  --  --  --  --  --  --  --  --  -- 




Counter: 5
Position: 24 (2, 2) (Empty cell!) Value: 9
 --  --  --  --  --  --  --  --  11  --  -- 
 11  --  --  --  --  --  --  --  --  --   9 
 --  --   9  --  --  --  --  --  --  --   2 
 --  --  --  --  --  --  --  --  --  --  13 
 --  --  13  --  --  --  --  --  --  --  -- 
 --  --  --  --  --  --  --  --  --   4  -- 
 --   4  --  --  --  --  --  --  --  --  -- 

我做错了什么?

0 个答案:

没有答案