2010-09-05 84 views
16

我剛開始學習編程。我正在學習循環,但 此程序無法按預期方式工作。我想打破循環的時候 $a等於3所以我得到的輸出1 2但我得到3作爲輸出:(簡單的循環不工作

for($a=0;$a<10;++$a) 
{ 
     if($a==3) 
       break 
     print"$a "; 
} 

請幫助。

+13

這是一個很好的例子來支持始終使用大括號的參數。有了它們,你會得到一個語法錯誤。 bmb 2010-09-05 19:08:28

+0

使用大括號+1。 – 2010-09-05 19:09:30

+0

@bmb:+大括號。我已經添加到我的答案。 – codaddict 2010-09-06 18:11:40

回答

41

缺少分號break


知道爲什麼你的程序表現的方式是相當有趣的。

break PHP中的一般語法是:

break Expression; 

表達是可選的,但如果存在其值告訴許多嵌套 封閉結構如何被細分的。

break 0;break 1;是一樣break;

您的代碼就相當於

if($a==3) 
     break print"$a "; 

現在在PHP中print函數總是返回1。因此,它是相當於

if($a==3) 
     break 1; 

所以當$a3您打印其價值和休息。

即使主體具有單個語句,最好使用大括號來包圍條件或循環的主體。在這種情況下,封閉if體中括號:

if($a==3) { 
    break 
} 
print"$a "; 

會給出一個語法錯誤:PHP需要一個;但發現一個}

上述所有適用於PHP continue爲好。所以程序

for($a=0;$a<10;++$a) 
{ 
     if($a==3) 
       continue 
     print"$a "; 
} 

也出於類似原因打印3

+1

什麼執行goose追逐! – erisco 2010-09-06 01:49:06

+2

我其實並不知道。 +1 – Cam 2010-09-06 14:17:18

3
for($a=0;$a<10;++$a) 
{ 
     if($a==3) break; 
     print $a; 
} 

@Downvoters:除了我是簡潔之外怎麼了?

+0

不是下來的選民,但那是多餘的 – 2010-09-05 18:59:22

4

正如codaddict所說,你在休息後錯過了分號。

您的代碼應該是這樣的:

for($a=0;$a<10;++$a) 
{ 
     if($a==3) 
      break; 
     echo $a, ' '; 
} 
+0

@Downvoters它有什麼問題... – judda 2010-09-05 19:01:40

+0

不是downvoter,但OP的問題是他*不會*得到語法錯誤。 – bmb 2010-09-05 19:10:31

19

你缺少斷裂的最後一個分號。;)

即使使用分號,它也不會像你期望的那樣工作,因爲它將從02。你必須這樣寫才能得到1 2

<?php 
for($a=1;$a<10;++$a) 
{ 
    if($a==3) 
      break; 
    print"$a "; 
} 
?> 

注意$ a現在是for循環初始化中的一個。

編輯:我注意到你應該知道的另一件事。在你的循環控制中,你有一個預增量(++$a)。這基本上意味着PHP增加值$a,然後返回$a。另一個選項是後增量($a++),其中$a得到返回,然後增加1。

在你的情況下,兩種方式都會得到正確的輸出。

這有時是非常重要的。要時刻銘記在心。

0
for($a=0;$a<10;$a++) { 
    if($a==3) { exit; } 
    else { echo $a; } 
} 
+0

使用'exit'可能不是正確的想法 - 堅持使用'break'會更好。 – 2010-09-07 00:23:12