【问题标题】:incrementation in while false result错误结果中的增量
【发布时间】:2016-01-20 08:05:17
【问题描述】:

我正在做一个项目,我必须创建一个矩阵并对其进行初始化。 这就是我对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] = 0matrice[1][0] = 1

但是当我打印矩阵时,一切都会很好,例如 matrice[1][0] 它等于 MAXWORD

但是如果像这样增加它,它同时工作得很好

while (i < MAXWORD)
  {
    matrice[i][0] = i;
    matrice[0][i] = i;
    i++
  }

为什么在退出whilewhile (i++ &lt; MAXWORD) 会改变matrice[1][0](并且只有matrice[1][0])的结果?

【问题讨论】:

  • 为什么不使用for() 循环?这是在一个范围内增加变量的正常方法。

标签: c while-loop increment


【解决方案1】:

当您在while() 语句中执行递增操作时,您将1 添加到i 进入循环体之前。所以在第一次迭代中,i 的值将是1,而不是0。这就是为什么你从不初始化matrice[0][0]

将增量移动到循环的末尾意味着您使用当前值输入它。所以第一次通过循环i 将是0,而不是1

循环一系列值的更好方法是使用for,而不是while

for (i = 0; i < MAXWORD; i++) {
    matrice[i][0] = i;
    matrice[0][i] = i;
}

【讨论】:

  • 我明白,但我不明白的是matrice[1][0] = MAXWORD (155)matrice[2][0] = 2
  • 我也不懂。这真的是全部功能吗?
【解决方案2】:

这是因为 postincrement 运算符,首先读取变量的值,并在读取值后将其加一,因此在您的代码中,当您在 while 中进行比较时,i 变量将

希望对您有所帮助。

【讨论】:

  • 代码进入while体时怎么会等于MAXWORD?第一次迭代后,它将是1,它不会155,应该是0
猜你喜欢
  • 1970-01-01
  • 2021-09-07
  • 2013-05-24
  • 2017-02-03
  • 2020-07-09
  • 1970-01-01
  • 2017-05-13
  • 2021-11-03
  • 1970-01-01
相关资源
最近更新 更多