2015-08-25 71 views
0
for(int i=0; i<3; i++){ 
switch(i) 
    case 0: 
    LAYOUT[i].x=i; 
    LAYOUT[i].y=i; 
    case 1: 
    LAYOUT[i].x=funcx(i); 
    LAYOUT[i].y=funcy(i); 
    case 2: 
    LAYOUT[i].x=2*i; 
    LAYOUT[i].y=4*i;} 

這是我遇到問題的簡化代碼。我想要這個代碼要做的是,當我= 0時,做什麼情況下0,當我= 1,做什麼情況1等等。開關語句僅適用於某些情況

但是,這裏是問題..例如,當i = 1時,它計算正確的.x(情況1)值,但對於.y它計算不同的i,例如0或2.我試圖把{ }圍繞每個案例中的所有代碼,但它沒有區別。我也試過我從1到3代替..

ofstream Zone1H; 
     Zone1H.open("TEST.txt"); 
for(int l=0; l<5; l++)   
      Zone1H<<LAYOUT[i].x<<" "<<LAYOUT[i].y<<endl; 

我的保存部分是否可以成爲問題?我從來沒有問題,但這部分雖然..

+6

你忘了在箱子之間放置'break',所以它正在下降到下一個案例。 – Barmar

+1

另外,switch語句需要打開和關閉大括號。 'switch(i){...}'那些不是可選的。 – jpw

+0

你可能會發現這個SO問題/答案的利益:http://stackoverflow.com/questions/252489/why-was-the-switch-statement-designed-to-need-a-break –

回答

5

你錯過了breakcase結束時。在所有情況下,只有最後一個纔會生效。

for(int i=0; i<3; i++){ 
    switch(i){ 
    case 0: 
     LAYOUT[i].x=i; 
     LAYOUT[i].y=i; 
     break; // <-- add this 
    case 1: 
     LAYOUT[i].x=funcx(i); 
     LAYOUT[i].y=funcy(i); 
     break; // <-- add this 
    case 2: 
     LAYOUT[i].x=2*i; 
     LAYOUT[i].y=4*i; 
     break; // <-- add this 
    } 
} 
0

您需要查看break聲明。當涉及到switch語句時,這是非常重要的。如果沒有中斷,它會評估其中一個爲真,並繼續查看其餘案例。如果在找到正確的大小寫的情況下在每條語句中添加一箇中斷,它將「斷開」開關並繼續循環中的下一個數字

1

每個案例結束時的中斷將使您離開switch語句並返回到for循環的頂部,以便您不會遍歷切換條件中的其他情況。

for(int i=0; i<3; i++){ 
switch(i){ 
    case 0: 
    LAYOUT[i].x=i; 
    LAYOUT[i].y=i; 
    break; 
    case 1: 
    LAYOUT[i].x=funcx(i); 
    LAYOUT[i].y=funcy(i); 
    break; 
    case 2: 
    LAYOUT[i].x=2*i; 
    LAYOUT[i].y=4*i; 
    break; 
} 
} 
+0

就像問題不應該簡單的代碼轉儲既不應該答案。至少嘗試解釋問題並描述如何解決問題以及爲什麼。 –

相關問題