線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:6415
推到 Plurk!
推到 Facebook!

switch...case多重選擇的問題...

答題得分者是:tech_state
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-02 16:46:59 IP:210.80.xxx.xxx 未訂閱
各位前輩: 小弟我使用選擇判斷的格式,卻一直出現問題。程式碼如下: void __fastcall TForm1::Button5Click(TObject *Sender) { switch(x) { case 0: AnsiString tPna1=Edit10->Text; AnsiString tPn1=Edit11->Text; break; case 1: AnsiString tPna2=Edit10->Text; AnsiString tPn2=Edit11->Text; break; case 2: AnsiString tPna3=Edit10->Text; AnsiString tPn3=Edit11->Text; break; case 3: AnsiString tPna4=Edit10->Text; AnsiString tPn4=Edit11->Text; break; case 4: AnsiString tPna5=Edit10->Text; AnsiString tPn5=Edit11->Text; break; case 5: AnsiString tPna6=Edit10->Text; AnsiString tPn6=Edit11->Text; break; case 6: AnsiString tPna7=Edit10->Text; AnsiString tPn7=Edit11->Text; break; case 7: AnsiString tPna8=Edit10->Text; AnsiString tPn8=Edit11->Text; break; case 8: AnsiString tPna9=Edit10->Text; AnsiString tPn9=Edit11->Text; break; case 9: AnsiString tPna10=Edit10->Text; AnsiString tPn10=Edit11->Text; break; case 10: AnsiString tPna11=Edit10->Text; AnsiString tPn11=Edit11->Text; break; } } 錯誤訊息如下: [C Error] Unit1.cpp(443): E2126 Case bypasses initialization of a local variable [C Error] Unit1.cpp(448): E2126 Case bypasses initialization of a local variable [C Error] Unit1.cpp(452): E2126 Case bypasses initialization of a local variable [C Error] Unit1.cpp(457): E2126 Case bypasses initialization of a local variable [C Error] Unit1.cpp(462): E2126 Case bypasses initialization of a local variable [C Error] Unit1.cpp(467): E2126 Case bypasses initialization of a local variable [C Error] Unit1.cpp(472): E2126 Case bypasses initialization of a local variable [C Error] Unit1.cpp(477): E2126 Case bypasses initialization of a local variable [C Error] Unit1.cpp(482): E2126 Case bypasses initialization of a local variable [C Error] Unit1.cpp(487): E2126 Case bypasses initialization of a local variable [C Warning] Unit1.cpp(493): W8004 'tPn11' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPna11' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPn10' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPna10' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPn9' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPna9' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPn8' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPna8' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPn7' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPna7' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPn6' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPna6' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPn5' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPna5' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPn4' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPna4' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPn3' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPna3' is assigned a value that is never used [C Warning] Unit1.cpp(493): W8004 'tPna2' is assigned a value that is never used 可是我程式前面使用都沒有問題: switch(i) { case 0: strcpy(pLi, "0000"); break; case 1: strcpy(pLi, "0001"); break; case 2: strcpy(pLi, "0002"); break; case 3: strcpy(pLi, "0003"); break; } 我真的不知道哪裡的問題,請各位大大多加指導!謝謝~ P.S.: x參數我是設為int x; 其他的我是宣告為:ex: char pLi[32]; 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-02 16:55:07 IP:140.135.xxx.xxx 未訂閱
leeli您好:    您必須用大括號{},將每一個 AnsiString tPna1=Edit10->Text; AnsiString tPn1=Edit11->Text; 括起來 即
 
int x;
 switch(x)
  {
   case 0:
    {
     AnsiString tPna1=Edit10->Text;
     AnsiString tPn1=Edit11->Text;
    }
   break;       case 1:
    {
     AnsiString tPna2=Edit10->Text;
     AnsiString tPn2=Edit11->Text;
    }
   break;
   case 2:
    {
     AnsiString tPna3=Edit10->Text;
     AnsiString tPn3=Edit11->Text;
    }
   break;
   case 3:
    {
     AnsiString tPna4=Edit10->Text;
     AnsiString tPn4=Edit11->Text;
    }
   break;
   case 4:
    {
     AnsiString tPna5=Edit10->Text;
     AnsiString tPn5=Edit11->Text;
    }
   break;
   case 5:
    {
     AnsiString tPna6=Edit10->Text;
     AnsiString tPn6=Edit11->Text;
    }
   break;
   case 6:
    {
     AnsiString tPna7=Edit10->Text;
     AnsiString tPn7=Edit11->Text;
    }
   break;
   case 7:
    {
     AnsiString tPna8=Edit10->Text;
     AnsiString tPn8=Edit11->Text;
    }
   break;
   case 8:
    {
     AnsiString tPna9=Edit10->Text;
     AnsiString tPn9=Edit11->Text;
    }
   break;
   case 9:
    {
     AnsiString tPna10=Edit10->Text;
     AnsiString tPn10=Edit11->Text;
    }
   break;
   case 10:
    {
     AnsiString tPna11=Edit10->Text;
     AnsiString tPn11=Edit11->Text;
    }
   break;
  }
順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-02 17:06:34 IP:61.230.xxx.xxx 未訂閱
你好: 把AnsiString宣告拿到switch之外...
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-02 17:06:47 IP:210.80.xxx.xxx 未訂閱
謝謝指導! 不過,為何要用括號呢?因為,我前面的程式碼並沒有使用說~ 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
collonil
中階會員


發表:13
回覆:56
積分:63
註冊:2003-03-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-02 17:27:15 IP:210.71.xxx.xxx 未訂閱
這應該和AnsiString物件的生命週期有關... 如果你只要在Button5Click()中使用, 就將AnsiString宣告 移到switch外, 如果整個form都會用到, 就在form開頭宣告吧... BCB學習中~~
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-02 17:33:51 IP:61.221.xxx.xxx 未訂閱
leeli, 您好 為什麼要括號呢? 我的想法是這樣的:因為您在case中有宣告變數,而在case中宣告的變數只能在該case中使用,所以必須要括號來告知系統,此變數的有效範圍在哪裡。 這樣說或許有些攏統,舉個例子吧! 在case中宣告的變數可以看成是在某個function中所宣告的區域(local )變數,而一旦離開case的範圍之後就沒有其他的function認識他了。 如果不想用括號,或是目前在case中宣告的變數在離開case之後還會使用到,那就如JerryKuo所說的,將所有在case中的宣告都拿到switch之外。    
 switch(x)
 {
   case 0:
    {
     AnsiString tPna1=Edit10->Text;
     AnsiString tPn1=Edit11->Text;
    }
   break;       case 1:
    {
     AnsiString tPna2=Edit10->Text;
     AnsiString tPn2=Edit11->Text;
    }
   break;
 }
 ShowMessage(tPna1);
以上的code會出現Undefined symbol 'tPna1' 以上是個人想法,如有錯誤請指正。 ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之 發表人 - tech_state 於 2003/07/02 17:45:56
系統時間:2024-05-03 18:53:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!