hlmod.hu
https://hlmod.hu/

For ciklus megszakítása else-nél.
https://hlmod.hu/viewtopic.php?f=9&t=29483
Oldal: 1 / 1

Szerző:  aarpi. [ 2018.10.31. 08:40 ]
Hozzászólás témája:  For ciklus megszakítása else-nél.

Helló van egy for cikluska aminél azt szeretném, hogy ha a for ban van if elágazás else-vel együtt akkor az else részt ne írja annyiszor mint amennyi meg van adva a for-ban pld.

Kód:
for(new i;i < 5; i++) 
{
   if(g_valami[i][id] > 100)
   {
      ColorChat(0, GREEN, "%d", i) // tehát ezt itt 5x ki fogja írni a chatre
   }
   else
   {
      ColorChat(0, GREEN, "Sikertelen") // és itt az else-nél ezt a szöveget is 5x írja ki és én azt szeretném csak 1x írja ki chatre, megoldható ez valahogy?
   }

Szerző:  exodus [ 2018.10.31. 12:08 ]
Hozzászólás témája:  Re: For ciklus megszakítása else-nél.

Azért írja ki 5x mert mind az 5 tömb értéke nagyobb mint 100

Szerző:  BeepBeep [ 2018.10.31. 12:21 ]
Hozzászólás témája:  Re: For ciklus megszakítása else-nél.

aarpi. írta:
Helló van egy for cikluska aminél azt szeretném, hogy ha a for ban van if elágazás else-vel együtt akkor az else részt ne írja annyiszor mint amennyi meg van adva a for-ban pld.

Kód:
for(new i;i < 5; i++) 
{
   if(g_valami[i][id] > 100)
   {
      ColorChat(0, GREEN, "%d", i) // tehát ezt itt 5x ki fogja írni a chatre
   }
   else
   {
      ColorChat(0, GREEN, "Sikertelen") // és itt az else-nél ezt a szöveget is 5x írja ki és én azt szeretném csak 1x írja ki chatre, megoldható ez valahogy?
   }


Használhatod a continue;-t, ha a következő esetre szeretnél ugrani, vagy a break;-t, ha ki akarsz lépni a ciklusból.

Szerző:  aarpi. [ 2018.10.31. 12:23 ]
Hozzászólás témája:  Re: For ciklus megszakítása else-nél.

exodus írta:
Azért írja ki 5x mert mind az 5 tömb értéke nagyobb mint 100

Nem vágod mit szeretnék vagy én írtam le szarul.
Leírom még1x:c
Ha az 5tömb értéke meg van több mint száz akkor chatre kiírja:
Kód:
1
2
3
4
5


De ha nincs meg akkor:
Kód:
Sikertelen
Sikertelen
Sikertelen
Sikertelen
Sikertelen


És én ezzel azt szeretném, hogy ha nincs meg azaz értek a sikertelent ne írja ki ennyiszer hanem csak 1x.

Szerző:  Heist [ 2018.10.31. 13:01 ]
Hozzászólás témája:  Re: For ciklus megszakítása else-nél.

Szia, nem tudok rajtad elmenni slovák barátom de próbálok segíteni.

  1. // Kizárás-megszakítás
  2. new hours,minutes,seconds;
  3. time(hours,minutes,seconds);
  4.  
  5. if(6 < hours && hours < 23)
  6.     return PLUGIN_CONTINUE;
  7.        
  8.        
  9. // Adott esetben futás
  10. new hours,minutes,seconds;
  11. time(hours,minutes,seconds);
  12.  
  13. if(22 < hours || hours < 6)

Szerző:  BeepBeep [ 2018.10.31. 14:10 ]
Hozzászólás témája:  Re: For ciklus megszakítása else-nél.

Heist írta:
Szia, nem tudok rajtad elmenni slovák barátom de próbálok segíteni.

  1. // Kizárás-megszakítás
  2. new hours,minutes,seconds;
  3. time(hours,minutes,seconds);
  4.  
  5. if(6 < hours && hours < 23)
  6.     return PLUGIN_CONTINUE;
  7.        
  8.        
  9. // Adott esetben futás
  10. new hours,minutes,seconds;
  11. time(hours,minutes,seconds);
  12.  
  13. if(22 < hours || hours < 6)



Mivel nem tudjuk, konkrétan mit akart, ezért nem hiszem, hogy ez egy jó megoldás lenne. Ha szükséges a funkció szempontjából ciklussal végigmenni a játékosokon, akkor ez nem alkalmazható.

Szerző:  MASKED [ 2018.11.02. 00:14 ]
Hozzászólás témája:  Re: For ciklus megszakítása else-nél.

aarpi. írta:
exodus írta:
Azért írja ki 5x mert mind az 5 tömb értéke nagyobb mint 100

Nem vágod mit szeretnék vagy én írtam le szarul.
Leírom még1x:c
Ha az 5tömb értéke meg van több mint száz akkor chatre kiírja:
Kód:
1
2
3
4
5


De ha nincs meg akkor:
Kód:
Sikertelen
Sikertelen
Sikertelen
Sikertelen
Sikertelen


És én ezzel azt szeretném, hogy ha nincs meg azaz értek a sikertelent ne írja ki ennyiszer hanem csak 1x.


Hátha megfelelő neked.
  1. new szamlalo=0;
  2. for(new i;i < 5; i++)
  3. {
  4.    if(g_valami[i][id] > 100)
  5.    {
  6.         ColorChat(0, GREEN, "%d", i) // tehát ezt itt 5x ki fogja írni a chatre
  7.    }
  8.    else
  9.    {
  10.       szamlalo++;
  11.    }
  12. }
  13. if(szamlalo>0)
  14. {
  15.      ColorChat(0, GREEN, "Sikertelen %d alkalommal", szamlalo) // Így csak egyszer írja ki a for ciklus lefutása után és azt is mutatja, hogy hányszor sikertelen
  16. }

Szerző:  BeepBeep [ 2018.11.02. 10:12 ]
Hozzászólás témája:  Re: For ciklus megszakítása else-nél.

MASKED írta:
aarpi. írta:
exodus írta:
Azért írja ki 5x mert mind az 5 tömb értéke nagyobb mint 100

Nem vágod mit szeretnék vagy én írtam le szarul.
Leírom még1x:c
Ha az 5tömb értéke meg van több mint száz akkor chatre kiírja:
Kód:
1
2
3
4
5


De ha nincs meg akkor:
Kód:
Sikertelen
Sikertelen
Sikertelen
Sikertelen
Sikertelen


És én ezzel azt szeretném, hogy ha nincs meg azaz értek a sikertelent ne írja ki ennyiszer hanem csak 1x.


Hátha megfelelő neked.
  1. new szamlalo=0;
  2. for(new i;i < 5; i++)
  3. {
  4.    if(g_valami[i][id] > 100)
  5.    {
  6.         ColorChat(0, GREEN, "%d", i) // tehát ezt itt 5x ki fogja írni a chatre
  7.    }
  8.    else
  9.    {
  10.       szamlalo++;
  11.    }
  12. }
  13. if(szamlalo>0)
  14. {
  15.      ColorChat(0, GREEN, "Sikertelen %d alkalommal", szamlalo) // Így csak egyszer írja ki a for ciklus lefutása után és azt is mutatja, hogy hányszor sikertelen
  16. }


Nem fogja 5x kiírni chatre, ha kisebb, mint 100. Ha 2 elem kisebb, akkor csak háromszor fogja.
Végülis igen, használhatod a megszámlálást. De akkor a ciklusban a feltételt módosíthatod és még tovább rövidíthetsz a kódon, elhagyva az else ágat. Lásd az alábbi plugint. Azonban ez csak egy előfeltételre igaz.

  1. public teszt() {  
  2.   new n[10] = {101, 74, 133, 63, 221, 100, 101, 102, 103, 104};
  3.   new szamlalo=0;
  4.   for(new i;i < 10; i++)  {
  5.     if (n[i] < 100) { // Előfeltétel
  6.       szamlalo++;
  7.       log_amx("a, i: %d", i);
  8.       continue;
  9.     }
  10.  
  11.     log_amx("b, i: %d", i);
  12.   }
  13.  
  14.   if(szamlalo>0)
  15.   {
  16.     log_amx("szamlalo: %d", szamlalo);
  17.   }
  18. }


Eredmény:
[teszt.amxx] b, i: 0
[teszt.amxx] a, i: 1
[teszt.amxx] b, i: 2
[teszt.amxx] a, i: 3
[teszt.amxx] b, i: 4
[teszt.amxx] b, i: 5
[teszt.amxx] b, i: 6
[teszt.amxx] b, i: 7
[teszt.amxx] b, i: 8
[teszt.amxx] b, i: 9
[teszt.amxx] szamlalo: 2


A kód tehát így rövidülne:
  1. new szamlalo = 0;
  2.     for(new i;i < 5; i++) {
  3.        if(g_valami[i][id] < 100) { // Ha a valami eleme < 100
  4.             szamlalo++
  5.             continue; // Következő elemre ugrunk, nem fut tovább a ciklus
  6.        }
  7.        // Ha öbb feltétel nincs, nem szükséges else ág, a continue; utasítás miatt a ciklus nem fut tovább így nincs mit tovább ellenőrizni és a következő elemre ugrik. Tehát jöhet a kód további része.
  8.        ColorChat(0, GREEN, "%d", i)
  9.     }
  10.  
  11.     if(szamlalo > 0) {
  12.          ColorChat(0, GREEN, "Sikertelen %d alkalommal", szamlalo) // Így csak egyszer írja ki a for ciklus lefutása után és azt is mutatja, hogy hányszor sikertelen
  13.     }

Szerző:  aarpi. [ 2018.11.02. 11:13 ]
Hozzászólás témája:  Re: For ciklus megszakítása else-nél.

Köszönöm nektek, hogy ilyen segítőkészek vagytok viszont amit beep írt először a break tökéletes számomra:D

Esetleg ha valaki használná így használja:
Kód:
else
{
Colorchat(id, GREEN, "Sikertelen")
break
}

Oldal: 1 / 1 Minden időpont UTC+02:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/