我正在做一个项目,我必须创建一个矩阵并对其进行初始化。
所以这就是我对 init
所做的矩阵:
int levenshtein(char *string1, char *string2)
{
int32_t firstWord = strlen(string1);
int32_t secondWord = strlen(string2);
int32_t matrice[MAXWORD][MAXWORD]; //MAXWORD = 155
int32_t i = 0;
int32_t j = 0;
while (i++ < MAXWORD)
{
matrice[i][0] = i;
matrice[0][i] = i;
}
}
所以当我打印矩阵时,我应该进入 matrice[0][0] = 0
, matrice[1][0] = 1
等等
但是当我打印矩阵时,一切都会很好,除了 matrice[1][0]
它等于 MAXWORD
.
但是如果像这样递增它就可以完美地工作
while (i < MAXWORD)
{
matrice[i][0] = i;
matrice[0][i] = i;
i++
}
为什么 while (i++ < MAXWORD)
将改变 matrice[1][0]
的结果(并且只有 matrice[1][0]
)在退出 while
之后?
最佳答案
当您在 while()
语句中执行递增时,您将 1
添加到 i
之前 你进入了循环体。所以在第一次迭代中,i
的值将是 1
,而不是 0
。这就是为什么您从不初始化矩阵[0][0]
。
将增量移动到循环的末尾意味着您使用当前值输入它。所以第一次通过循环 i
将是 0
,而不是 1
。
循环遍历一系列值的更好方法是使用 for
,而不是 while
:
for (i = 0; i < MAXWORD; i++) {
matrice[i][0] = i;
matrice[0][i] = i;
}
关于c - while false 结果的递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33257394/