2012-03-16 194 views
1

我不确定我是否在此循环中遗漏了某些内容。 我希望它执行8次循环内的代码,这会导致它在LCD上输出8个字符,但它会循环7次,我只能看到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]]); 
} 
+1

iii>(keycount-8)这里存在你的问题。试试这个iii =>(keycount-8) – XepterX 2012-03-16 09:58:42

+0

这意味着循环计数器iii从8开始,并且在0结束,当iii = 0时该循环也不应该迭代,因为条件还表示迭代iii => 0? – TiOLUWA 2012-03-16 10:08:44

+1

但您的keycount-8 = 1不等于0 – XepterX 2012-03-17 06:05:10

回答

1

好的,没有什么你循环体更改控制它的变量,所以它都归结于循环本身。

简单地写下来的初始值,并在你的脑袋上运行的循环:

//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 

换句话说,它只是迭代七次,不是八颗。我怀疑你打算从8下降到1(而不是2)迭代iii。如果是这样的话,整个循环可以用更简单的东西代替。

// 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

为了使这更清晰,变换的数字通过减去(keycount - 1)就像你在大学时所做的那样求解代数方程(它必须对有好处!今天你知道为什么:-)。你所留下的是

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

从中不难看出,循环迭代7次(i的取值在0至-6)。我已经忽略了jii<8这部分总是如此,因此对结果没有贡献。

要回答您错误的地方:它似乎是错误错误。你的意思是>=你写的是>