我正在浏览这篇文章(https://spin.atomicobject.com/2012/06/18/solving-sudoku-in-c-with-recursive-backtracking/),其中解释了一种用于解决C语言中的数独难题的回溯方法,并且我对if语句中的条件有两个疑问。
他使用了if(puzzle [row] [column]),我不确定它在检查什么。如果该位置存在数字,它将继续吗?为此,我本来想使用!= null来检查它是否为空
他还在if语句中使用了一个函数调用:if(isValid(nextNum,puzzle,row,column)这是否意味着如果函数成功,它将执行if内的内容?
答案 0 :(得分:3)
因为在C int
中可以使用布尔表达式代替布尔表达式,其中0为false,其他为true,if(puzzle[row][column])
是惯用的书写方式
if(puzzle[row][column] != 0)
我更喜欢后者,因为前者确实使那些不熟悉该习语的人感到困惑。
如果该位置存在数字,它将继续吗?为此,我本以为使用!= null
一个单元格中的值实际上是数字-int
。他使用零作为“尚未填写”的约定。如果数组中的值是指针,我会同意if(puzzle[row][column] != NULL)
,但它们不是指针。
答案 1 :(得分:0)
在C中,条件0为假,非零为真。 puzzle
是int
的二维数组。如果int
为0,则条件评估为false。如果int
不为零,则条件评估为true。