1

我不确定我是否在这个 for 循环中遗漏了一些东西。我希望它在循环内执行 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]]);
}
4

2 回答 2

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

换句话说,它只迭代七次,而不是八次。我怀疑您打算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]]);
于 2012-09-07T08:03:51.537 回答
0

为了更清楚地说明这一点,通过减去 (keycount - 1) 来转换数字,就像你在大学里解代数方程时所做的那样(它必须有好处!今天知道为什么了:-)。你剩下的是

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

从中很容易看出循环迭代了 7 次(i 取值从 0 到 -6)。我忽略了jii<8始终正确的部分,因此对结果没有贡献。

要回答您弄错的问题:这似乎是一个错误的错误。你是说>=你写的地方>吗?

于 2012-09-07T08:10:21.877 回答