2014-07-21 170 views
-2

爲什麼下面的第一個程序工作,但第二個程序不工作?我的意思是,第二個程序提供了一個錯誤爲什麼「for(; i <= 10; i ++)」工作,但「for(i = 0; i <= 10 ;;)」不?

「之前預期的表現‘;’」

但爲什麼那麼不給同爲「爲(;我< = 10; i ++)「那裏也有第一個表達式丟失?不是「;;」 in 「for(i = 0; i < = 10 ;;)」表示第二個程序表示空白?最後,爲什麼「for(i = 0; i < = 10;)」然後刪除第二個分號?

//Program 1 
#include<stdio.h> 

int main() 
{ 
int i=1; 
for(;i<=10;i++) 
{ 
printf("%d\n",i); 
} 
} 

//Program 2 
#include<stdio.h> 

int main() 
{ 
int i; 
//for(i=1;i<=10;) // This works but following doesn't 
for(i=1;i<=10;;) 
{ 
printf("%d\n",i); 
i++; 
} 
} 
+10

*計算分號,你會看到/ **兩個**不同於** three **。* – Zeta

+0

分號(;)並不表示空白表達式。它將3個表達式分爲loop.A for循環包含2個分號 –

回答

12

for(i=1;i<=10;;)不是有效的C語法。用C for循環語法是

for (expressionopt ; expressionopt ; expressionopt) statement 
for (declaration expressionopt ; expressionopt) statement 

需要注意的是,兩個分號必須始終存在,即使我們忽略了一些表情。

+4

for語句中只有兩個分號。 – John

+1

但爲什麼其他人提到的是?如果你能加上一些嚴謹的解釋,我將不勝感激,儘管我很想記下你所說的規則。 – Meathead

+0

你能改說你的話嗎? – haccks

4

A for語句循環由三個分號分隔的子句組成。因此,它應該只有兩個分號,第三個會導致語法錯誤。這三個部分的含義如下:

  • 變量初始化 - 對於循環中的第一次迭代
  • 狀態前只執行一次 - 每次迭代之前後執行,以驗證週期應該打破其執行
  • 一步 - 每次迭代

後的狀況的檢查之前執行這些步驟的每可能是空的,但即使正好兩個分號應該分開部分。

0

這只是一個語法錯誤。

正確的C語法是:

for(exp11, .., exp1N; exp21, .., exp2N ; exp31, .., exp3N) { } 
2

的「for」結構被設置爲具有3個部分: - 實例化可變迭代上,多久進行迭代,並且更新變量(遞增,遞減或以其他方式)。

for(int i=0; i<10; i++) 

所以當你有下面的循環,你有4個部分,這不是有效的語法的「for」循環。(該部分由分號隔開。)另一種是錯誤的,但語法正確因爲它有3個部分。

for(i=1;i<=10;;) 
+3

'增量變量'部分顯然是不完整的。你可以在第三部分中增加,減少任何你想要的變量。請使用'更新'來防止混淆。 – epipav

1

對於循環包含三個條件

  • 初始化,
  • 條件迭代,
  • 增量。

第一個條件,也可以聲明之前for循環像

Int i=0;      
for(;i<10;i++) 
{    
}     

增量也可以在迴路中聲明

for(i=0;i<10;)    
{     
     i++;    
}       

迭代應該是肯定的條件在循環。
但是,您的循環包含語法,就像四個條件(3分號)一樣。所以它不被C編譯器識別。如果你刪除多餘的分號它會工作。

相關問題