Массив не рандомизирован как следует, а значения имеют отрицательное значение - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь сохранить случайные числа, используя функцию srand, чтобы сохранить значения в двумерном массиве, используя цикл.Когда я распечатываю массив, он каждый раз имеет одни и те же значения, а числа часто имеют отрицательные значения, что странно, и они остаются неизменными, даже если есть функция srand.

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

#define NROW 13
#define NCOL 11

int main()
{
    void disp_array(int a[NROW][NCOL]);

    int ar[NROW][NCOL];
    int i, j;

    for (i = 0; i < NROW; i++) {
        for (j = 0; j < NCOL; j++) {
            ar[NROW][NCOL] = (rand() % 101);
        }
    }
    disp_array(ar);

    return 0;
}

void disp_array(int a[NROW][NCOL])
{
    int i;
    int j;

    for (i = 0; i < 7; i++) {
        for (j = 0; j < 5; j++) {
            printf("Value at row %d column %d is %d \n", i, j, a[i][j]);
        }
    }
}

1 Ответ

0 голосов
/ 25 апреля 2018

Во-первых, утверждение ar[NROW][NCOL]= (rand()%101); неверно, поскольку каждый раз, когда вы присваиваете данные тем же ar[NROW][NCOL] и NROW & NCOL, не меняется.

Так замените его как ar[i][j]= (rand()%101);

Во-вторых, чтобы напечатать элементы массива, напечатайте вот так

for (i=0;i<NROW;i++){  /* don't use < 5 or < 7 if you have NROW & NCOL*/
        for(j=0;j<NCOL;j++){
               ar[i][j]= (rand()%101);
        }
} 

Наконец, в операторе ar[i][j]= (rand()%101); rand() генерируется то же случайное число, если вы не изменили начальное значение. Прочитайте страницу руководства rand() и srand(). например, используйте srand(getpid()) перед вызовом rand().

srand(getpid());/*getpid() returns process id and 
              every time process manager generates different process id*/ 

См. Это http://man7.org/linux/man-pages/man3/rand.3.html и https://linux.die.net/man/3/srand

...