Я думаю, что вы пытаетесь инициализировать элементы в mtx
уникальными случайными целыми числами от 0 до n-1
, где n
- это количество элементов в mtx
(представляет ли mtx
ячейку судоку? ). Если это так:
Ваш цикл for
устанавливает для всех элементов mtx
одинаковое значение. Так что, если вы пытаетесь сделать то, что я думаю, это не сработает в любом случае.
Вам нужно перетасовать список чисел от 0
до n-1
. Перестановка Фишера-Йейтса довольно проста и эффективна.
Если вы не хотите иметь дело с malloc
и друзьями, вот один из способов сделать это.
/* maximum possible size, replace ... with actual numbers */
int list[] = {0,1,2,3,4,5,6,7,8,...,80};
/* function to shuffle the first n elements of list */
void shuffle(int *list, size_t n);
, а затем, когда вы знаете значение num
.
shuffle(list, num*num);
for (i=0; i < num; ++i)
for (j=0; j < num; ++j)
mtx[i][j] = list[i*num+j];
и вы можете избавиться от всего кода, связанного со случайными числами, вашего цикла do...while
и т. Д.
Я не написал shuffle()
для вас, потому что я думаю, что это будет забавное упражнение для вас. : -)
Наконец, ваше приглашение:
printf("Enter an integer (3-9): ");
может не отображаться для пользователя во время вызова printf()
выше, потому что stdout
является буферизацией строки по умолчанию во многих системах. Чтобы убедиться, что он отображается до того, как ваша программа ожидает ввода, выполните:
fflush(stdout);
прежде чем пытаться прочитать ввод. Это обеспечит правильное отображение подсказки.