คำถามติดแท็ก switch-statement

ในการเขียนโปรแกรมคอมพิวเตอร์คำสั่ง switch, case, select หรือ inspect เป็นชนิดของกลไกการควบคุมการเลือกที่ใช้เพื่อเรียกใช้บล็อกเฉพาะของรหัสตามเนื้อหาตัวแปร



10
สลับคำสั่งสำหรับมากกว่า / น้อยกว่า
ดังนั้นฉันต้องการใช้คำสั่ง switch เช่นนี้ switch (scrollLeft) { case (<1000): //do stuff break; case (>1000 && <2000): //do stuff break; } ตอนนี้ฉันรู้แล้วว่าข้อความเหล่านี้ ( <1000) หรือ ( >1000 && <2000) ไม่ทำงาน (ด้วยเหตุผลที่แตกต่างกันอย่างชัดเจน) สิ่งที่ฉันถามคือวิธีที่มีประสิทธิภาพที่สุดในการทำสิ่งนั้น ฉันเกลียดการใช้ 30 ifคำสั่งดังนั้นฉันควรใช้ไวยากรณ์สวิตช์ มีอะไรที่ฉันทำได้บ้างไหม?

18
ทำไมคำสั่ง switch ไม่สามารถใช้กับสตริงได้
type illegalรวบรวมรหัสต่อไปและมีข้อผิดพลาดของ int main() { // Compilation error - switch expression of type illegal switch(std::string("raj")) { case"sda": } } คุณไม่สามารถใช้สตริงทั้งในหรือswitch caseทำไม? มีวิธีใดที่ทำงานได้ดีในการรองรับตรรกะที่คล้ายกับการเปิดสตริง?

19
มีความแตกต่างอย่างมีนัยสำคัญระหว่างการใช้ if / else และ switch-case ใน C # หรือไม่?
ประโยชน์ / ข้อเสียของการใช้switchคำสั่งเทียบกับข้อif/elseใน C # คืออะไร ฉันไม่สามารถจินตนาการได้ว่ามันมีความแตกต่างอย่างมากนอกเหนือไปจากโค้ดของคุณ มีเหตุผลใดบ้างที่ทำให้ IL ที่ได้หรือประสิทธิภาพรันไทม์ที่เกี่ยวข้องนั้นแตกต่างกันอย่างสิ้นเชิง? ที่เกี่ยวข้อง: อะไรคือเร็วกว่าเปิดสตริหรืออื่น ๆ ในประเภท?

8
ถูกต้อง แต่ไม่มีค่าไวยากรณ์ในตัวพิมพ์สลับหรือไม่
จากการพิมพ์ผิดเล็กน้อยฉันพบโครงสร้างนี้โดยบังเอิญ: int main(void) { char foo = 'c'; switch(foo) { printf("Cant Touch This\n"); // This line is Unreachable case 'a': printf("A\n"); break; case 'b': printf("B\n"); break; case 'c': printf("C\n"); break; case 'd': printf("D\n"); break; } return 0; } ดูเหมือนว่าprintfที่ด้านบนของswitchคำสั่งนั้นถูกต้อง แต่ก็ไม่สามารถเข้าถึงได้อย่างสมบูรณ์ ฉันได้คอมไพล์สะอาดโดยไม่มีแม้แต่คำเตือนเกี่ยวกับรหัสที่ไม่สามารถเข้าถึงได้ แต่สิ่งนี้ดูเหมือนไม่มีจุดหมาย คอมไพเลอร์ควรตั้งค่าสถานะนี้ว่าเป็นรหัสที่ไม่สามารถเข้าถึงได้หรือไม่ สิ่งนี้มีจุดประสงค์หรือไม่?

4
Swift: ประเภทการทดสอบคลาสในคำสั่ง switch
ใน Swift คุณสามารถตรวจสอบประเภทคลาสของวัตถุโดยใช้ 'is' ฉันจะรวมสิ่งนี้ลงในบล็อค 'สวิตช์' ได้อย่างไร ฉันคิดว่ามันเป็นไปไม่ได้ดังนั้นฉันจึงสงสัยว่าอะไรคือวิธีที่ดีที่สุดในรอบนี้

12
วิธีใช้ null ในสวิตช์
Integer i = ... switch (i){ case null: doSomething0(); break; } ในรหัสข้างต้นฉันไม่สามารถใช้ null ในงบกรณีสวิตช์ ฉันจะทำสิ่งนี้ต่างออกไปได้อย่างไร ฉันไม่สามารถใช้defaultเพราะแล้วฉันต้องการทำอย่างอื่น

2
ใน JavaScript การกลับมาจากคำสั่ง switch ถือเป็นการปฏิบัติที่ดีกว่าการใช้ตัวแบ่ง?
ตัวเลือกที่ 1 - สลับใช้การส่งคืน: function myFunction(opt) { switch (opt) { case 1: return "One"; case 2: return "Two"; case 3: return "Three"; default: return ""; } } ตัวเลือก 2 - สลับการใช้ตัวแบ่ง: function myFunction(opt) { var retVal = ""; switch (opt) { case 1: retVal = "One"; break; case 2: retVal …

7
สลับคำสั่งสำหรับการจับคู่สตริงใน JavaScript
ฉันจะเขียน swtich สำหรับเงื่อนไขต่อไปนี้ได้อย่างไร หาก URL มี "foo" ดังนั้น settings.base_url คือ "bar" ต่อไปนี้คือการบรรลุเอฟเฟ็กต์ที่ต้องการ แต่ฉันรู้สึกว่ามันสามารถจัดการได้ง่ายขึ้นในสวิตช์: var doc_location = document.location.href; var url_strip = new RegExp("http:\/\/.*\/"); var base_url = url_strip.exec(doc_location) var base_url_string = base_url[0]; //BASE URL CASES // LOCAL if (base_url_string.indexOf('xxx.local') > -1) { settings = { "base_url" : "http://xxx.local/" }; } // DEV …

5
สลับเคสด้วยการตกหล่นหรือไม่
ฉันกำลังมองหาไวยากรณ์ที่ถูกต้องของคำสั่งสลับกับกรณีที่ผิดพลาดใน Bash (นึกคิดกรณีเล็ก ๆ น้อย ๆ ) ใน PHP ฉันต้องการเขียนโปรแกรมเช่น: switch($c) { case 1: do_this(); break; case 2: case 3: do_what_you_are_supposed_to_do(); break; default: do_nothing(); } ฉันต้องการเหมือนกันใน Bash: case "$C" in "1") do_this() ;; "2") "3") do_what_you_are_supposed_to_do() ;; *) do_nothing(); ;; esac สิ่งนี้ไม่ทำงาน: ฟังก์ชั่นdo_what_you_are_supposed_to_do()ควรถูกไล่ออกเมื่อ $ C เป็น 2 หรือ 3

10
สลับคำสั่ง: ค่าเริ่มต้นจะต้องเป็นกรณีสุดท้ายหรือไม่
พิจารณาข้อความต่อไปนี้switch: switch( value ) { case 1: return 1; default: value++; // fall-through case 2: return value * 2; } รหัสนี้จะรวบรวม แต่มันถูกต้อง (= พฤติกรรมที่กำหนด) สำหรับ C90 / C99? ฉันไม่เคยเห็นรหัสที่กรณีเริ่มต้นไม่ใช่กรณีสุดท้าย แก้ไข: ตามที่Jon CageและKillianDSเขียน: นี่เป็นโค้ดที่น่าเกลียดและสับสนและฉันก็รู้ดี ฉันแค่สนใจในไวยากรณ์ทั่วไป (มันถูกกำหนดหรือไม่) และผลลัพธ์ที่คาดหวัง

23
ข้อดีของการสลับคำสั่ง if-else
อะไรคือแนวปฏิบัติที่ดีที่สุดสำหรับการใช้switchคำสั่งกับการใช้ifคำสั่งสำหรับการunsignedแจกแจง30 รายการซึ่งประมาณ 10 รายการมีการกระทำที่คาดหวัง (ปัจจุบันคือการกระทำเดียวกัน) ต้องคำนึงถึงประสิทธิภาพและพื้นที่ แต่ไม่สำคัญ ฉันสรุปตัวอย่างแล้วดังนั้นอย่าเกลียดฉันสำหรับแบบแผนการตั้งชื่อ switch คำให้การ: // numError is an error enumeration type, with 0 being the non-error case // fire_special_event() is a stub method for the shared processing switch (numError) { case ERROR_01 : // intentional fall-through case ERROR_07 : // intentional fall-through case ERROR_0A …

13
Objective-C สามารถสลับกับ NSString ได้หรือไม่?
มีวิธีที่ชาญฉลาดกว่านี้ในการเขียนซ้ำหรือไม่? if ([cardName isEqualToString:@"Six"]) { [self setValue:6]; } else if ([cardName isEqualToString:@"Seven"]) { [self setValue:7]; } else if ([cardName isEqualToString:@"Eight"]) { [self setValue:8]; } else if ([cardName isEqualToString:@"Nine"]) { [self setValue:9]; }

8
การควบคุมไม่สามารถผ่านได้จากฉลากเคสเดียว
ฉันพยายามเขียนคำสั่ง switch ที่จะพิมพ์คำค้นหาในช่องค้นหาขึ้นอยู่กับช่องค้นหาใดก็ตาม ฉันมีรหัสต่อไปนี้ แต่ฉันได้รับข้อผิดพลาด "การควบคุมไม่สามารถผ่านจากป้ายกำกับกรณีเดียว" switch (searchType) { case "SearchBooks": Selenium.Type("//*[@id='SearchBooks_TextInput']", searchText); Selenium.Click("//*[@id='SearchBooks_SearchBtn']"); case "SearchAuthors": Selenium.Type("//*[@id='SearchAuthors_TextInput']", searchText); Selenium.Click("//*[@id='SearchAuthors_SearchBtn']"); } การควบคุมไม่สามารถผ่านจากป้ายชื่อกรณีหนึ่ง ( case "SearchBooks":) ไปยังอีกฉลาก การควบคุมไม่สามารถผ่านจากป้ายชื่อกรณีหนึ่ง ( case "SearchAuthors":) ไปยังอีกฉลาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.