Сколько раз это для итерации цикла ()? - PullRequest
1 голос
/ 16 марта 2012

Я не уверен, что я что-то упустил в этом цикле for. Я ожидаю, что он выполнит код внутри цикла 8 раз, что приведет к выводу 8 символов на ЖК-дисплее, но он повторяется 7 раз и вижу только семь символов. Я использую компилятор Keil для этого. Пожалуйста, кто-нибудь может определить, где я ошибаюсь?

//keycount = 9
for ( iii = (keycount-1),jii = 0; iii > (keycount-8) && jii <8; iii--,jii++)
{
    LCD_Data_Write (jii,Digit_Mask[keybuff[iii]]);
}

Ответы [ 2 ]

1 голос
/ 07 сентября 2012

Хорошо, ничто в теле цикла не изменяет переменные, которые его контролируют, поэтому все зависит от самого цикла.

Просто запишите начальные значения и запустите цикл в своей голове:

//keycount = 9
for ( iii = (keycount-1),jii=0; iii>(keycount-8) && jii <8;iii--,jii++)

iii   jii   iii > 1   jii < 8  
---   ---   -------   -------
  8     0      Y         Y        iterate 1
  7     1      Y         Y        iterate 2
  6     2      Y         Y        iterate 3
  5     3      Y         Y        iterate 4
  4     4      Y         Y        iterate 5
  3     5      Y         Y        iterate 6
  2     6      Y         Y        iterate 7
  1     7      N         Y        exit loop

Другими словами, он повторяется только семь раз, а не восемь. Я подозреваю, что вы хотели повторить iii с 8 до 1 (а не 2). Если это так, весь цикл можно заменить на что-то гораздо более простое.

// keycount = 9
for (jii = 0; jii < 8; jii++)
    LCD_Data_Write (jii, Digit_Mask[keybuff[8-jii]]);

На самом деле, даже если значения должны быть в диапазоне от 7 до 0, просто изменить вызов на:

LCD_Data_Write (jii, Digit_Mask[keybuff[7-jii]]);
0 голосов
/ 07 сентября 2012

Чтобы сделать это более понятным, преобразуйте числа, вычитая (keycount - 1) точно так же, как вы делали это в колледже при решении уравнений алгебры (это должно было быть хорошо для чего-то ! Сегодняты знаешь почему :-).То, что вам осталось, это

 for (i = 0; i > -7; i--)

, из которого легко увидеть, что цикл повторяется 7 раз (при этом я принимаю значения от 0 до -6).Я проигнорировал часть jii<8, которая всегда верна и, таким образом, не влияет на результат.

Чтобы ответить на вопрос, где вы ошибаетесь: кажется, что это off-by-он ошибка.Вы имели в виду >=, где вы написали >?

...