Slettet bruger
30. marts 2006 - 15:41
Der er
24 kommentarer og 1 løsning
Kan man have flere case numre i en switch
Er det muligt at lave switch(test) { case 1: gør dit case 2..10 gør dat }
Annonceindlæg fra Partnertekst
30. marts 2006 - 15:43
#1
ja, ellers gav det ikke meget mening... switch(test) { case 1: gør dit break; case 2..10 gør dat break; }
Slettet bruger
30. marts 2006 - 15:44
#2
Umiddelbart virker det ikke i C!!
30. marts 2006 - 15:49
#3
"Umiddelbart"? Har du ikke en fejlmeddelse? Evt. kunne det være at compileren kræver en default. switch(test) { case 1: //gør dit break; case 2: //..10 gør dat break; default: // gør intet break; } HUSK også at afslutte hver case-linie med':'
Slettet bruger
30. marts 2006 - 15:50
#4
error: too many decimal points in number
30. marts 2006 - 15:55
#5
Se min sidste kommentar...
Slettet bruger
30. marts 2006 - 15:56
#6
jep var allerede sket.....
30. marts 2006 - 15:58
#7
Konkret eksempel: void test(int foo) { switch(foo) { case 0: cout << "0"; break; case 1: case 2: case 3: cout << "1-3"; break; case 4: case 5: case 6: case 7: cout << "4-7"; break; default: cout << "??"; break; } cout << endl; }
30. marts 2006 - 15:58
#8
Eller endnu bedre: post din kode herind.
30. marts 2006 - 15:59
#9
Men generelt er det nemmere at teste intervaller med en if sætning.
Slettet bruger
30. marts 2006 - 16:02
#10
det er såmænd bare switch(test) { case 0..13, 28..33: printf("TEST"); break; default: printf("Default"); }
30. marts 2006 - 16:06
#11
Jeg misforstod dit spm, du bliver nødt til at liste de muligheder med seperat case, som i ex soreno.
30. marts 2006 - 16:06
#12
Men det kan kompilatoren jo UMULIGT regne ud hvad du mener der ;o) Kig på Sorenos kode.
30. marts 2006 - 16:09
#13
Og som soreno siger, er det nok mere belejligt med if, når du tester på den måde.
30. marts 2006 - 16:10
#14
if((test>0 && test<14) && (test>27 && test<34)){ }
30. marts 2006 - 16:13
#15
eller, ikke og: if((test>0 && test<14) || (test>27 && test<34)){ }
30. marts 2006 - 16:15
#16
Lidt lettere at læse + rigtig test for 0: if((test>=0 && test<=13) || (test>=28 && test<=33)){ }
30. marts 2006 - 16:15
#17
Klart
30. marts 2006 - 18:11
#18
Eller hvis man er mere til funktionsorienteret programmering: bool inInterval(int minIncl, int maxExcl, int val) { if(val >= minIncl && val < maxExcl) return TRUE; else return FALSE; } if(inInterval(0,13,3)) { // do stuff }
30. marts 2006 - 20:06
#19
Nu er der jo ingen grund til at lave der unødvendigt simpelt, man kan jo lave: #include <set> #include <iostream> class Interval : private std::set<int> { public: Interval() {} Interval(int aStart, int aEnd) { while(aStart <= aEnd) insert(aStart++); } friend Interval operator + (const Interval& lhs, const Interval& rhs); bool operator == (int val) { return find(val) != end(); } }; Interval operator + (const Interval& lhs, const Interval& rhs) { Interval I; I.insert(lhs.begin(), lhs.end()); I.insert(rhs.begin(), rhs.end()); return I; } int main() { if(Interval(1, 3) + Interval(5, 9) == 2) { std::cout << "2 is in the interval" << std::endl; } if(Interval(1, 3) + Interval(5, 9) == 4) { std::cout << "4 is in the interval" << std::endl; } return 0; } Nogen vil måske synes at == syntax'en er en lille smugle odd, men jeg kunne ikke lige finde bedre.
Slettet bruger
31. marts 2006 - 09:48
#20
tak gider michael_stim og soreno lave et svar også..
31. marts 2006 - 09:51
#21
Ok.
31. marts 2006 - 10:00
#22
Skal ikke have nogle point, men syndes nok at bertelbrander har fortjent nogle stilpoint *LOL*
Slettet bruger
05. april 2006 - 08:14
#23
Det kan jeg godt leve med... bertelbrander gider du lave en besvarelse...
05. april 2006 - 19:42
#24
Jeg samler ikke på point.
Slettet bruger
07. april 2006 - 10:12
#25
Lukker spm
Kurser inden for grundlæggende programmering