2012-03-16 196 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這部分總是如此,因此對結果沒有貢獻。

要回答您錯誤的地方:它似乎是錯誤錯誤。你的意思是>=你寫的是>