2015-10-21 3 views
2

Я работаю над проектом, где должен создать матрицу и инициализировать ее. Так это то, что я сделал, чтобы init в Matrice:Приращение при ложном результате

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 я должен получить в matrice[0][0] = 0, matrice[1][0] = 1 и т.д.

Но когда я напечатать Matrice все будет хорошо exepte что 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?

+2

Почему бы не использовать 'для()' цикл? Это нормальный способ увеличения переменной по диапазону. – Barmar

ответ

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; 
} 
+0

Я понимаю, но я не знаю, что 'matrice [1] [0] = MAXWORD (155)' и 'matrice [2] [0] = 2 – leykan

+0

Я тоже этого не понимаю. Это действительно целая функция? – Barmar

0

Это из-за оператора postincrement, сначала считывает значение вашей переменной и увеличивает его на один после считывания значения, поэтому в вашем коде переменная i будет <, чем MAXWORD, когда вы выполняете сравнение в то время , и будет равен MAXWORD при входе в тело while.

Надеюсь, что это вам поможет.

+0

Как это будет равно MAXWORD, когда код входит в тело? После первой итерации она будет '1', она не будет' 155', она должна быть '0'. – Lundin

Смежные вопросы