2013-05-08 35 views
5

攻讀計算機科學的最後的圈......對於printf的爲第三個參數

我真想不通這個例子出來.....

我明白,離開第一個參數空白使得它像真....

,但我不明白的第二個參數來完成剩下的變量....

什麼我不明白的最多的是如何printf語句「更新「變量條件...

#include<stdio.h> 
    int main() 
    { 
    int x=1, y=1; 
    for(; y; printf("%d %d\n", x, y)) 
    { 
     y = x++ <= 5; 
    } 
    printf("\n"); 
    return 0; 
    } 

輸出是:

2 1 
3 1 
4 1 
5 1 
6 1 
7 0 

編輯:

我現在for循環結構部分理解.....

感謝您的答案 - 很有見地的感謝!

+2

聲明「將第一個參數留空使其表現爲TRUE」不正確。 for循環的第二部分是條件,而不是第一部分。 – 2013-05-08 19:21:07

回答

14

for環路可以被認爲是for (INITIALIZATION; CONDITION; AFTERTHOUGHT)

循環的第一部分是用於初始化。把它留空是好的,它只是表明你已經初始化了循環所需的任何變量。

for循環的第二個表達式(或條件)中的y等效於y!=0。它使for循環繼續運行,直到y==0

後續printf在每次迭代結束時運行,但不會更改y的值。然而,循環的身體確實會改變y

大多數教材都會對此進行描述。或者參見Wikipediacplusplus

0

這將運行程序,直到y是0,因爲0作爲整數也是假

+0

儘量不要給他什麼,他/她明顯可以看到什麼,他們想知道爲什麼。 – 2013-05-08 19:31:04

6

考慮這個結構在for循環中:

for (a; b; c) 
{ 
    d; 
} 

這是會發生什麼:

  1. 代碼a將被執行
  2. 條件b將被評估。如果它爲false,for循環會中斷。
  3. 代碼d被執行。
  4. 代碼c被執行。
  5. 轉到步驟2

發生了什麼事在年底你是代碼的「C」部分是打印的y的價值,它正好是0。然後評估條件。由於y == 0,因for 0等於false,for循環將中斷。

0
Leaving a variable y implies the loop will run till y is true 
loop will stop when y becomes false 

Now this condition that you have written in body evaluates value of y 
y = x++ <= 5; 

Whenever x++ <= 5 implies y is true that is 1 
So it starts with x=1 and prints until value of x becomes 7 
and y=x++ <= 5; returns false and loop exits. 
2

我早期發現的一個技巧是,如果我無法理解for循環,請嘗試將其分解成等效while循環。您也可以括號事情,使他們更具可讀性(只要你按照操作對您的括號的順序不會搞砸你的評價你的循環應該是這樣的這些變化:

#include<stdio.h> 
int main() 
{ 
    int x=1, y=1; 
    while(y) 
    { 
     y = (x++ <= 5); 
     printf("%d %d\n", x, y) 
    } 
    printf("\n"); 
    return 0; 
} 

有了這些夫婦改變它可以很容易地看到你的打印語句沒有改變/更新任何東西,但只打印你的y值的結果。

0

雖然simonc提供的答案是完美的,但也有一個實際的解決方案。這個程序在Visual Studio中,在for循環的開始處添加一個斷點,並使用F10鍵運行每個語句,它會清楚地顯示執行時的流程,這將有助於清除所有疑惑。瞭解變量的價值觀,這將有助於進一步的發展。 這是通過我的大部分疑惑幫助我的。享受編碼!

相關問題