[英]I can't understand the increment portions of for loops in c language for specific problem
#include <stdio.h>
#include <conio.h>
int main(void)
{
char ch;
for(ch=getche(); ch!='q'; ch=getche());
printf("Found the q");
return 0;
}
我不明白這里的 for 循環是如何工作的。 我可以理解初始化和條件測試。 但是不明白為什么我必須在增量部分中再次使用 getche function。
將這個for
循環重寫為等效的while
循環可能會有所幫助:
for(ch=getche(); ch!='q'; ch=getche());
變成
ch = getche();
while (ch != 'q') {
ch = getche();
}
所以你通過調用getche
反復得到一個新字符,直到你得到的字符等於'q'
。
如果沒有第二個ch=getche()
,您將只得到一個字符並一遍又一遍地將其與'q'
進行比較(如果不是'q'
則會導致無限循環)。
記住for
循環通常是如何工作的:
for ( init-expressionopt ; test-expressionopt ; update-expressionopt )
statement
init-expression
(如果存在)只計算一次; 它(通常)設置我們正在測試的東西。 在這種情況下,它通過調用getche
來初始化ch
的值。
在每次循環迭代之前,都會評估test-expression
(如果存在); 如果為零,則循環退出。 在這種情況下,測試是ch != 'q'
。
每次循環迭代后,都會評估update-expression
(如果存在); 它更新了我們正在測試的東西。 在這種情況下,它通過執行另一個getche
調用來更新ch
的值。 如果沒有這一步, ch
的值不會改變,循環將無限期地執行。
為了清楚地重寫for循環
for(ch=getche(); ch!='q'; ch=getche());
以下方式
for(ch=getche(); ch!='q'; )
{
ch=getche();
}
這是第二個 for 循環體中的語句
ch=getche();
在第一個 for 循環的第三部分中作為表達式移動。
在 for 循環的第三部分中,可以使用任何表達式,而不僅僅是帶有遞增或遞減運算符的表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.