←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Awaryjne wyjście ze switch'a

Zablokowany

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 02.03.2012

mam taki kod i potrzebuje w pewnym momencie wyjść z całego switcha i zrobiłem coś takiego:


switch(item)
{
case 0:
{
if(is_user_alive(id))
{
if(!ciche[id] && limit[id] < MAX_ITEMS)
{
ciche[id]=true;
limit[id]++
break; // ale jak dam tutaj break to wywala blad: vip_naku.sma(232) : error 024: "break" or "continue" is out of context
}


ja poprawnie w pewnym momencie opuścić tą pętle? i nie chodzi mi o zwrócenie wartości
Odpowiedz

  • +
  • -
A może sma? - zdjęcie A może sma? 03.03.2012

Ale przecież tutaj nie ma pętli ;D
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 03.03.2012

Switch to nie pętla ^ ^
Użyj samego "return" zamiast "break".
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 03.03.2012

i nie chodzi mi o zwrócenie wartości


return jak rozumiem w ogóle wyjdzie z funkcji, a ja potrzebuje tylko opuścić switcha
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 03.03.2012

Hmm, ale po co wychodzić? Jeśli "item" ma wartość 0, to wejdzie tylko do "case 0:", a resztę pominie.
Odpowiedz

  • +
  • -
grzesiu131 - zdjęcie grzesiu131 03.03.2012

Za pauzuj go ?
/*switch(item)
{
case 0:
{
if(is_user_alive(id))
{
if(!ciche[id] && limit[id] < MAX_ITEMS)
{
ciche[id]=true;
limit[id]++
break; // ale jak dam tutaj break to wywala blad: vip_naku.sma(232) : error 024: "break" or "continue" is out of context
}*/

sebul (03.03.2012 16:36):
Swoje "mądrości" zachowaj dla siebie.
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 03.03.2012

Hmm, ale po co wychodzić? Jeśli "item" ma wartość 0, to wejdzie tylko do "case 0:", a resztę pominie.

po to że po switchu mam jeszcze troche kodu do wykonania

@edit: nie szukajcie sposobów na ominięcie tego od tyłu, tylko po prostu jakaś komenda albo cóś.
Użytkownik Nakupenda. edytował ten post 03.03.2012 14:54
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 03.03.2012

po to że po switchu mam jeszcze troche kodu do wykonania

Po switchu? No to przecież napisałem, że innych cache nie będzie sprawdzać.
Switch
switch(item) {
case 0: // kod
case 1: // kod
case 2: // kod
}

a w "ifach" będzie to wyglądać tak
if(item == 0) // kod
else if(item == 1) // kod
else if(item == 2) // kod

więc dalej nie rozumiem co masz na myśli pisząc "opuścić switcha".
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 03.03.2012

bo nie podałem całego kodu, a wygląda on tak:

	switch(item)
{
case 0:
{
if(is_user_alive(id))
{
if(!kolejny_warunek)
{
jakis_bool=true;
zmienna++
}
else if(!costam_sie_nie_zgadza)
{
ColorChat(id, GREEN, "Wyjscie ze switch'a!");
// TU potrzebuje wyjsc ze switcha
}
else
{
ciche[id]=false;
limit[id]--
}

// dalsze operacje w case, ktorych nie chce w jednym z przypadkow
}
else
show_hudmessage(id, "Zupelnie co innego !")
}
case 1:
//nastepne kejs'y


}

//tu jest koniec switcha i tu chce sie znalezc
// dalszy kod



@edit: znalazłem rozwiązanie goto, ale nie powinno się go stosować. Ma ktoś lepszy pomysł niż to:
	switch(item)
{
case 0:
{
if(is_user_alive(id))
{
if(!kolejny_warunek)
{
jakis_bool=true;
zmienna++
}
else if(!costam_sie_nie_zgadza)
{
ColorChat(id, GREEN, "Wyjscie ze switch'a!");
goto koniec_switcha;
}
else
{
ciche[id]=false;
limit[id]--
}

// dalsze operacje w case, ktorych nie chce w jednym z przypadkow
}
else
show_hudmessage(id, "Zupelnie co innego !")
}
case 1:
//nastepne kejs'y


}

koniec_switcha:
// dalszy kod

Użytkownik Nakupenda. edytował ten post 03.03.2012 15:20
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 03.03.2012

sebul czytaj czasem on ma kod w stylu


switch(item) {
        case 0: cos=0 // kod
        case 1: cos=1// kod
        case 2: cos=2// kod
}
client_print(id,print_chat,"%d",cos);

i nie chce np po wybraniu opcji 1 zeby sie napis pojawial


jest takie cos jak

exit

Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 03.03.2012

bosko, dzięki GoQ. exit przenosi tuż za ostatnią klamrę switcha?
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 03.03.2012

@edit: znalazłem rozwiązanie goto, ale nie powinno się go stosować.

A to czemu? Ja bym raczej powiedział, że należy unikać "goto", a nie, że nie powinno się go w ogóle stosować.

sebul czytaj czasem on ma kod w stylu


switch(item) {
        case 0: cos=0 // kod
        case 1: cos=1// kod
        case 2: cos=2// kod
}
client_print(id,print_chat,"%d",cos);

i nie chce np po wybraniu opcji 1 zeby sie napis pojawial

No raczej chyba on tak nie napisał ;]

Jeśli exit się nie sprawdzi, to ja bym to zrobił tak
switch(item) {
case 0: {
new bool:costam;
if(warunek) {
// kod
costam = true;
}
else if(warunek) {
// kod
}
else {
// kod
}

if(!costam) {
// kod
}
}
case 1: {
// kod
}
case 2: {
// kod
}
}
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 03.03.2012

bosko, dzięki GoQ. exit przenosi tuż za ostatnią klamrę switcha?


nie wiem sprawdz w amxx studio podkresla sie na zielono wiec moze dzialać xD
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 03.03.2012

nie wiem sprawdz w amxx studio podkresla sie na zielono wiec moze dzialać xD


hahah, zawsze spoko xD

A to czemu? Ja bym raczej powiedział, że należy unikać "goto", a nie, że nie powinno się go w ogóle stosować.


jeden pies. Prawie zawsze można to czymś zastąpić

Jeśli exit się nie sprawdzi, to ja bym to zrobił tak

no to też wpadłem xD ale chciałem po ludzku, bo mam w ifie kilka warunków do sprawdzenia

Dobra, dzięki CLOSE, jak coś to zawsze można otworzyć :D
Użytkownik Nakupenda. edytował ten post 03.03.2012 16:05
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 03.03.2012

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany