Условия в выражении if - PullRequest
       16

Условия в выражении if

0 голосов
/ 13 марта 2019

Я просматриваю эту статью (https://spin.atomicobject.com/2012/06/18/solving-sudoku-in-c-with-recursive-backtracking/), объясняющую подход обратного отслеживания для решения головоломки судоку в C, и у меня возникла пара вопросов об условиях в операторах if.

Он использует if (головоломка [строка] [столбец]), я не уверен, что он проверяет. Если номер существует в этой позиции, он будет продолжаться? Для этого я бы подумал использовать! = Null, чтобы убедиться, что он не пустой

Он также использует вызов функции внутри оператора if: if (isValid (nextNum, puzzle, row, column)) Означает ли это, что если функция успешна, она выполняет то, что находится внутри if?

Ответы [ 2 ]

3 голосов
/ 13 марта 2019

Поскольку в C int выражения могут использоваться вместо логических выражений, где 0 равно false, а все остальное - true, if(puzzle[row][column]) - идиоматический способ записи

if(puzzle[row][column] != 0)

Я предпочитаюпоследний, потому что первый действительно сбивает с толку людей, не знакомых с идиомой.

Если число существует в этой позиции, оно будет продолжаться?Для этого я бы подумал использовать! = Null

Значения в ячейке являются числами - int s на самом деле.Он использует ноль в качестве соглашения для "еще не заполнен".Если бы значения в массиве были указателями, я бы согласился с if(puzzle[row][column] != NULL), но они не являются указателями.

0 голосов
/ 13 марта 2019

В условных выражениях C 0 - ложь, а все ненулевое - истина.puzzle - это двумерный массив int.Если int равно 0, то условное значение оценивается как ложное.Если int отличен от нуля, то условное значение оценивается как true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...