Dapatkah saya menggunakan switch case untuk memeriksa beberapa kondisi? seperti misalnya salah satu atau dari kondisi yang terpenuhi maka akan melakukan case-nya?
switch (conditionA or conditionB fullfilled)
{ //execute code }
Jelas, pertanyaan tentang bagaimana mengeksekusi kode jika kondisiA atau kondisiB adalah benar
dapat dijawab secara trivial dengan jika (kondisiA || kondisiB) ``, tidak ada pernyataan
switchyang diperlukan. Dan jika pernyataan
switchuntuk beberapa alasan harus dimiliki, maka pertanyaannya dapat dijawab secara trivial dengan menyarankan label
case` jatuh, seperti yang dilakukan oleh salah satu jawaban lainnya.
Saya tidak tahu apakah kebutuhan OP sepenuhnya tercakup dalam jawaban-jawaban sepele ini, tetapi pertanyaan ini akan dibaca oleh banyak orang selain OP, jadi saya ingin menyajikan solusi yang lebih umum yang dapat menyelesaikan banyak masalah serupa yang jawaban sepele tidak akan bisa dilakukan.
Cara menggunakan pernyataan switch
tunggal untuk memeriksa nilai dari sejumlah kondisi boolean yang berubah-ubah pada saat yang sama.
Ini memang hacky, tetapi mungkin akan berguna.
Caranya adalah dengan mengkonversi nilai benar
/ salah
dari setiap kondisi Anda menjadi bit, menggabungkan bit-bit ini menjadi nilai int
, dan kemudian switch
pada nilai int
.
Berikut ini beberapa contoh kode:
#define A_BIT (1 << 0)
#define B_BIT (1 << 1)
#define C_BIT (1 << 2)
switch( (conditionA? A_BIT : 0) | (conditionB? B_BIT : 0) | (conditionC? C_BIT : 0) )
{
case 0: //none of the conditions holds true.
case A_BIT: //condition A is true, everything else is false.
case B_BIT: //condition B is true, everything else is false.
case A_BIT + B_BIT: //conditions A and B are true, C is false.
case C_BIT: //condition C is true, everything else is false.
case A_BIT + C_BIT: //conditions A and C are true, B is false.
case B_BIT + C_BIT: //conditions B and C are true, A is false.
case A_BIT + B_BIT + C_BIT: //all conditions are true.
default: assert( FALSE ); //something went wrong with the bits.
}
Kemudian, Anda dapat menggunakan label case
jika Anda memiliki skenario either-or. Sebagai contoh:
switch( (conditionA? A_BIT : 0) | (conditionB? B_BIT : 0) | (conditionC? C_BIT : 0) )
{
case 0:
//none of the conditions is true.
break;
case A_BIT:
case B_BIT:
case A_BIT + B_BIT:
//(either conditionA or conditionB is true,) and conditionC is false.
break;
case C_BIT:
//condition C is true, everything else is false.
break;
case A_BIT + C_BIT:
case B_BIT + C_BIT:
case A_BIT + B_BIT + C_BIT:
//(either conditionA or conditionB is true,) and conditionC is true.
break;
default: assert( FALSE ); //something went wrong with the bits.
}
.
Tidak. Dalam c++ switch case hanya dapat digunakan untuk memeriksa nilai dari satu variabel untuk kesetaraan:
switch (var) {
case value1: /* ... */ break;
case value2: /* ... */ break;
/* ... */
}
Tetapi Anda dapat menggunakan beberapa switch:
switch (var1) {
case value1_1:
switch (var2) {
/* ... */
}
break;
/* ... */
}