2013-03-25 183 views
2

當我執行此代碼時,我沒有得到完全隨機數的矩陣,而是得到許多重複數字。任何想法如何我可以rainGen函數來產生一個真正的隨機二維矩陣?任何你可以提供的幫助真的非常感謝!如何使用指針填充隨機數的二維數組

#include <iostream> 
#include <cstdlib> 
using namespace std; 

const int MATRIX_ROW = 5; 
const int MATRIX_COL = 5; 

int** rainGen(int **theMatrix_ptr_ptr, int rows); 

int main() 
{ 
    int matrix[MATRIX_ROW][MATRIX_COL]; 
    int *matrix_ptr[MATRIX_ROW]; 
int **matrix_ptr_ptr = &matrix_ptr[0]; 
int rows = 3; 

for (int count = 0; count < MATRIX_ROW; count++) 
    matrix_ptr[count] = &matrix[count][0]; 

rainGen(matrix_ptr_ptr, rows); 

return 0; 
} 

int** rainGen(int **theMatrix_ptr_ptr, int rows) 
{ 
    srand(1023); 

    for (int i = 0; i < rows; i++) 
     for (int j = 0; j < MATRIX_COL; j++) 
      *((*theMatrix_ptr_ptr + i) + j) = rand() % 100; 

return theMatrix_ptr_ptr; 
} 
+0

如果您正在使用C++顯然,更好'''使用可用的新功能'一樣''default_random_engine '''''uniform_int_distribution''等。 – gongzhitaao 2013-03-25 05:15:12

回答

1

我添加了一些調試代碼。 int matrix[MATRIX_ROW][MATRIX_COL];語句爲matrix分配內存,但不會初始化元素值。這些值將是先前內存使用的任何位模式。我將matrix元素值初始化爲-1的意外值。最後,我打印了matrix

#include <iostream> 
#include <cstdlib> 
using namespace std; 

const int MATRIX_ROW = 5; 
const int MATRIX_COL = 5; 

int** rainGen(int **theMatrix_ptr_ptr, int rows); 

int main() 
{ 
    int matrix[MATRIX_ROW][MATRIX_COL]; 
    // initialize matrix elements to -1. 
    for (int i = 0; i < MATRIX_ROW; ++i) 
      for (int j = 0; j < MATRIX_COL; ++j) 
       matrix[i][j] = -1; 
    int *matrix_ptr[MATRIX_ROW]; 
    int **matrix_ptr_ptr = &matrix_ptr[0]; 
    int rows = 3; // error 
    for (int i = 0; i < MATRIX_ROW; i++) 
      matrix_ptr[i] = &matrix[i][0]; 
    rainGen(matrix_ptr_ptr, rows); 
    // print matrix elements. 
    for (int i = 0; i < MATRIX_ROW; ++i) { 
      for (int j = 0; j < MATRIX_COL; ++j) 
       cout << " [" << i << "," << j << "] " << matrix[i][j]; 
      cout << endl; 
    } 
    return 0; 
} 

int** rainGen(int **theMatrix_ptr_ptr, int rows) 
{ 
    srand(1023); 
    for (int i = 0; i < rows; i++) 
      for (int j = 0; j < MATRIX_COL; j++) 
       *((*theMatrix_ptr_ptr + i) + j) = rand() % 100; //error 
    return theMatrix_ptr_ptr; 
} 

輸出:

[0,0] 8 [0,1] 53 [0,2] 30 [0,3] 51 [0,4] 40 
[1,0] 88 [1,1] 60 [1,2] -1 [1,3] -1 [1,4] -1 
[2,0] -1 [2,1] -1 [2,2] -1 [2,3] -1 [2,4] -1 
[3,0] -1 [3,1] -1 [3,2] -1 [3,3] -1 [3,4] -1 
[4,0] -1 [4,1] -1 [4,2] -1 [4,3] -1 [4,4] -1 

你可以從matrix元素看到的-1一個值,你是不是給matrix隨機值的所有元素。

作爲一個有幫助的提示,我用// error評論標註了兩個特別感興趣的聲明。

一旦你有固定的問題,輸出應該是這個樣子:

[0,0] 8 [0,1] 14 [0,2] 19 [0,3] 36 [0,4] 99 
[1,0] 53 [1,1] 45 [1,2] 20 [1,3] 64 [1,4] 3 
[2,0] 30 [2,1] 51 [2,2] 40 [2,3] 88 [2,4] 60 
[3,0] 22 [3,1] 36 [3,2] 42 [3,3] 1 [3,4] 49 
[4,0] 96 [4,1] 24 [4,2] 48 [4,3] 92 [4,4] 46 
0

我覺得你應該把你的srand()函數了功能

int** rainGen(int **theMatrix_ptr_ptr, int rows) 

的你應該把它變成主要的()。

另一種方法:

你可以改變函數srand(1234),以函數srand(時間())

但是你必須

#include <time.h> 

第一

0

函數srand( )重新初始化隨機生成器。 您可以使用當前時間作爲srand()的參數。 這將解決你的問題

0

根據我對你的問題的解釋。我爲你提供了一些代碼。可能這會對你有幫助。

#include <stdio.h> 
    #include <stdlib.h> 
    #include <time.h> 

    --------->int <--------- 
    main (int argc, char *argv[]) 
    { 
     /* Simple "srand()" seed: just use "time()" */ 
     unsigned int iseed = (unsigned int)time(NULL); 
     srand (iseed); 

     /* Now generate 5 pseudo-random numbers */ 
     int i; 
     for (i=0; i<5; i++) 
     { 
     printf ("rand[%d]= %u\n", 
      i, rand()); 
     } 
     return 0; 
    } 

/* 
    * rand: Generates 5 numbers using standard "srand()/rand()" function 
    * 
    * SAMPLE OUTPUT: 
    * rand[0]= 824522256 
    * rand[1]= 1360907941 
    * rand[2]= 1513675795 
    * rand[3]= 1046462087 
    * rand[4]= 253823980 
    */