2013-10-05 52 views
5

當我在for循環中使用兩個變量且條件不同時,兩個條件(如我在下面使用i<3,j<2)時,for循環始終執行,直到第二個條件失敗。無法理解爲具有兩個變量的循環

#include<iostream> 
#include<conio.h> 
using namespace std ; 
int main() 
{ 
int i,j ; 
for(i=0,j=0;i<3,j<2;i++,j++) 
{ 
    cout<<"hello" ; 
} 
getch() ; 
return 0 ; 
} 

在該代碼中,hello被打印2次。爲什麼?

如果我使用i<3,j<10,「Hello」會打印10次。我不明白爲什麼第一個條件被忽略。它是依賴於編譯器還是別的?

如果我用||等條件取代每件事情都會正常工作。 (OR)或& &(AND)。另一件事是我無法在for循環中初始化i和j,它向我展示了一個錯誤,但是當我用C風格或一個變量聲明變量時工作正常循環,爲什麼這樣?

編譯器我用過的是Orwell Dev C++。
在此先感謝。

+4

你,像其他許多人感到困惑,跑進逗號操作符。 – chris

+0

'我<3,j <2'是編寫條件的一種有趣方式...(可編譯,但是...) –

+0

經過這個:它幫助很多 http://stackoverflow.com/questions/1232176/how-to-put-two-increment-statements-in-ac-for-loop?answertab = votes#tab-top –

回答

7

for(i=0,j=0;i<3,j<2;i++,j++)

相當於

for(i=0,j=0;j<2;i++,j++)

逗號表達發生在最後一個表達式的值。

無論哪種情況第一,都會被忽視,而第二個只會被使用。

+0

但是爲什麼我不能在循環本身中聲明i和j。問題的第二部分在 – Arun

+0

@ Arun可能是你應該重新訪問'for'循環,從一本好書 – P0W

+0

@Arun你不會向我們展示產生錯誤的代碼和你得到的具體錯誤,所以我們只能猜測。 –

-1

c編譯器總是使用第二個條件。

因此使用j < 2。

使用for循環

 for(i=0,j=0;j<10;i++,j++) 
7

for循環包括:

for(START_STATEMENT; CONDITION_EXPRESSION, LOOP_EXPRESSION) BODY_BLOCK

其中:

  • START_STATEMENT任何語句,其中可能包含變量聲明。如果你想聲明2個變量,你可以寫int i=0, j=0,但不是int i=0; int j=0,因爲後者實際上是2個語句。同樣是節點,該變量聲明是聲明的一部分,但不能是(子)表達式的一部分。這就是爲什麼int i=0, int j=0也是不正確的。

  • CONDITION_EXPRESSION是任何單個表達式計算爲布爾值。在你的情況,你所使用的具有以下語義昏迷運營商A, B會做:

    • 評估(它會評估,不只是忽略)
    • 溝的
    • 結果評估乙
    • 回報B作爲結果

    你的情況:i<3,j<2比較i<3,你只是忽略了這個比較的結果。

    當指令有一些副作用時,逗號表達式非常有用,不僅僅是返回一個值。常見的情況是:可變增量/減量或賦值運算符。

  • LOOP_EXPRESSION是任何表達式,不必評估任何東西。這裏再次使用逗號表達式,忽略左側的結果。但是,在這種情況下,您並沒有使用結果,只是使用++副作用 - 即增加變量的值。

  • BODY_BLOCK是單個語句或塊,用大括號封裝。

以上for可以比較:

{ 
    START_STATEMENT; 
    while(EXPRESSION) { 
     BODY_BLOCK; 
     LOOP_EXPRESSION; 
    } 
} 
+0

爲什麼'繼續'指令?它不會修改任何內容。 – pt12lol

+0

不是真的需要。在之前(不正確)的版本中,我很快糾正了它,但將它留在那裏。 – CygnusX1

+0

好的,所以我喜歡它;) – pt12lol