Отредактированный вопрос
Как вы думаете, возможно ли с помощью rand () иметь только одну "1" на столбец, а в других местах есть только 0?
Да, конечно.
Вместо зацикливания на всех строках и всех столбцах для каждого отдельного элемента массива устанавливается случайное значение 0
или 1
do Инициализируйте все элементы массива на 0 (если они еще не были); переберите все столбцы и выберите 1 случайную строку и установите соответствующий элемент массива на 1
.
#include <stdlib.h>
#include <string.h> // memset
#include <time.h>
void generate(int *arr, size_t lines, size_t columns) {
int col, row;
memset(tab, 0, lines * columns * sizeof *arr);
for (col = 0; col < columns; col++) {
row = rand() % lines;
tab[row * columns + col] = 1;
}
}
int main(void) {
int tab[NB_LINE][NB_COLUMN];
srand(time(0)); /* no casts */
generate(&tab[0][0], NB_LINE, NB_COLUMN);
/* ... */
}
Обратите внимание, что я удалил srand()
из функции generate()
. srand()
должен вызываться не более одного раза за вызов программы (чтобы гарантировать максимальную случайность). Лучший способ сделать это - позвонить по номеру srand
из main()
.
Кроме того, вместо i
и j
я назвал переменные row
и col
.
И я сделал tab
локальной переменной, а не глобальной. По возможности избегайте глобалов: это услуга, которую вы делаете сами. Без глобальных данных информация передается функции через аргументы.