switch(wybór) { case 1||2:break; case 4:break; }[/code]
Ale jeśli dodam do drugiego case'a alternatywę 4||6. Wyświetla mi się błąd, że wartość 1 jest już w użyciu. "Co ma piernik do wiatraka"??
[code=php]switch(wybór) { case 1||2:break; case 4||6:break; }
ERROR: case value '1' already used
-- Dodane 11.08.2012 (So) 11:19 --
Widzę też, że żaden operator logiczny nie może być wstawiony, dla np. też wyświetla błąd.
Taka konstrukcja nie jest przewidziana w standardzie C++. W związku z tym zachowanie kompilatora jest nieprzewidywalne. Poza tym wątpię, żeby nawet ten pierwszy przykład zadziałał (np. jak wybór = 2).
Poprawny składniowo kod wygląda tak:
switch(wybór)
{
case 1:
case 2:
break;
case 4:
case 6:
break;
}
A jaki sens miałoby wstawienie operatora && w to miejsce? Jeżeli x == (1 && 2)?
Wytłumaczysz, dlaczego uważasz, że alternatywy 1 i 2 oraz 2 i 4 są zawsze prawdziwe…
Ja poczytam dokładniej o C++, a TY poczytaj więcej o gramatyce i składni j.polskiego, o stosowaniu wielkich liter na początku zdania, łączenia ‘nie’ z przymiotnikami “nieważne” zamiast “nie ważne”, o pisaniu “po prostu”, nie “poprostu” i wielu innych tego typu głupotach. A potem się “mądruj”.
Ludziku, powiedziałem, że poczytam. I tobie też to doradzam j.w. … Wiem o czym piszę, piszę o tym, o czym chciałbym się dowiedzieć, bo uczę się C++ drugi tydzień. A prosiłem o wytłumaczenie tych alternatyw, bo np. w matematyce nie zawsze są one prawdziwe.
I, jeśli łaska, wyjaśnij, skąd u licha wziąłeś te liczby, nie zawarłem w kodzie dwóch ‘2’.
Tak samo jak w matematyce w C++ alternatywa jest prawdziwa jeśli co najmniej jeden z argumentów jest prawdziwy, gdy oba są prawdziwe to również. Alternatywa jest fałszywa tylko gdy oba argumenty są fałszywe.
Przy konwersji wartości całkowitej na logiczną 0 to fałsz, wszystko inne różne od 0 to prawda. Zarowno 1, 2, 4 jak i 6 są różne od zera więc są prawdziwe. W odwrotną stronę fałsz daje 0 a prawda 1.
to i tak bez znaczenia bo i tak wyjdzie prawda, czyli 1
W każdym case może być tylko jedna wartość - w twoim przypadku jest tam “1 || 2”, więc kompilator obliczy wartość wyrażenia. Najpierw zamieni liczby na wartości logiczne (0 - fałsz, wart. niezerowe - prawda), następnie alternatywa ( PRAWDA LUB PRAWDA). Rezultat - PRAWDA. zmienna wybór zapewne jest typu int więc wartość case jest również zamieniana na int (prawda na int to 1) i dlatego w obu case masz jeden, ale zapisane dwoma innymi wyrażeniami.
switch(wybór)
{
case 1:
case 2: //tu kod dla 1 lub 2
break;
case 4:
case 6: //a tu dla 4 lub 6
break;
}
W ten sposób osiągniesz zamierzony efekt, korzystając z pewnej sztuczki - po znalezieniu właściwej etykiety kod jest wykonywany linijka po linijce (także spod innych etykiet) aż do natrafienia na “break;”
switch(wybór)
{
case 1: //wykonywane jeśli wybór == 1
case 2: //tu wybór == 1 lub wybór == 2
break;
case 4: //wybór == 4
case 6: //a tu wybór == 4 lub wybór == 6
break;
}
Możesz jeszcze przestudiować przykłady podane przez kolegów powyżej, powinno to trochę wyjaśnić w kwestii instrukcji switch. Powodzenia w dalszej nauce.