簡體   English   中英

對於特定問題,我無法理解 c 語言中 for 循環的增量部分

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM