Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Losowanie tekstu ze stringu do drugiego


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
10 odpowiedzi w tym temacie

#1 wiwi249

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 22.09.2014 21:56

Hej!

Mam mały problem, nie chcę się bachnąć.

Mam dwie tablice:

new tablica[5] 
formatex(tablica, charsmax(tablica), "abcde");

...

new tekst[8];

I teraz, za pomocą pętli for, uzupełniam tablicę tekst. Poprawnie to będzie, jeśli zrobię to w następujący sposób?

for(new i=0; i<=8; i++)
{
		tekst[i] = tablica[random_num(0,4)];
}

Jeśli nie, jak to inaczej zrobić? Przeglądam dokumentację biblioteki string ale nie mam pomysłu.


Użytkownik wiwi249 edytował ten post 22.09.2014 21:57

  • +
  • -
  • 0

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#2 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 22.09.2014 22:01

Zacznijmy od tego, czym chcesz ją wypełnić? Losowymi literami?


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#3 wiwi249

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 22.09.2014 22:02

Tak jest, losowymi literami z tablicy ;)


  • +
  • -
  • 0

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#4 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 22.09.2014 22:11

To kombinujesz w dobrą stronę, ale... to jeszcze nie to :)

 

Litera w programie komputerowym to nic innego, jak cyfra o odpowiedniej wartości... ale nie są to wartości od 0 do 4 (te są zarezerwowane dla specjalnych znaków), ale 65-90 dla wielkich liter i 97-122 dla małych. Ale nie trzeba tych wartości pamiętać, wystarczy użyć 'A' i 'Z' dla wielkich liter oraz 'a' i 'z' dla małych. Więc random_num('a', 'z') wylosuje małą literę. Jeśli chcesz losować wielkie lub małe, trzeba troszkę nakombinować.

 

I pamiętaj, że ostatni znak musi być KONIECZNIE nullem (czyli znakiem o numerze 0).

 

Tak, jak zrobiłeś również zadziała, ale jest trochę naokoło. Lepiej od początku uczyć się dobrych praktyk


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#5 wiwi249

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 22.09.2014 22:17

Czyli sugerujesz nie wykorzystywać w ogóle tablicy "tablica[5]" ? Rozumiem chyba. Skoro zadziała to okej, dzięki wielkie ;)


  • +
  • -
  • 0

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#6 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 22.09.2014 23:45

Twój pomysł byłby dobry jesli chciałbyś losować tylko z jakiegoś wzorca (wzorzec to tablica) tyle że do Twojej tablicy możesz wpisać 4 znaki a nie 5 tak jak to zrobiłeś bo zawsze musisz zarezerwować sobie ostatni element na znacznik końca ciągu-znaków


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#7 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 23.09.2014 02:04

Twój pomysł byłby dobry jesli chciałbyś losować tylko z jakiegoś wzorca (wzorzec to tablica) tyle że do Twojej tablicy możesz wpisać 4 znaki a nie 5 tak jak to zrobiłeś bo zawsze musisz zarezerwować sobie ostatni element na znacznik końca ciągu-znaków

Chyba chciałeś napisać 7 znaków, a nie 8 ^ ^
sebul (23.09.2014 16:56):
*a nie 9

  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#8 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 23.09.2014 11:27


Chyba chciałeś napisać 7 znaków, a nie 8 ^ ^

 

 


new tablica[5]

 

 

EDIT

Wiem Sebul ale przestałem debbugować jak znalazłem pierwszy błąd ^^


sebul (23.09.2014 16:50):
I? Przecież to jest ta tablica, z której losuje się znaki, niżej masz inną tablicę, do której są przypisywane znaki ^ ^
sebul (23.09.2014 16:54):
A dobra, w obydwu miejscach jest źle :D
Zarówno przy tablicy "tablica" (ale tutaj po prostu nie zapisze "e"), ale też w tablicy "tekst" jest pętla od 0 do 8, a powinna być od 0 do 6.

Użytkownik G[o]Q edytował ten post 23.09.2014 17:54

  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#9 wiwi249

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 23.09.2014 15:21

w takim razie wedlug tego ma byc tak?

new tablica[5] 
formatex(tablica, charsmax(tablica), "abcd"); //tutaj 4 znaki jak tablica jest 5-znakowa?

...

new tekst[9];
for(new i=0; i<=8; i++)
{
        tekst[i] = tablica[random_num(0,4)]; //tutaj podobnie?
}

  • +
  • -
  • 0

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#10 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 23.09.2014 15:50

random(0,3) albo random(o,charsmax(tablica))


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#11 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 23.09.2014 22:51

W przypadku tablicy źródłowej nie gra to roli, czy będzie null na końcu, czy nie, bo może go nie być... Tą tablicę traktujemy jako zbiór znaków, a nie jako string. Jednak żeby nulla na końcu nie było, musimy ją wypełnić mniej więcej w taki sposób:

 

new tablica[] = {'a', 'b', 'c', 'd', 'e'};

I absolutnie nic tu się złego nie stanie, jeśli każdy ze znaków będziemy używać osobno, a nie całość jako string. Nie możemy tego potraktować formatem, bo nam ten null na końcu wstawi (albo przynajmniej spróbuje).

 

Prawdziwy problem jest tu:

new tekst[9];
for(new i=0; i<=8; i++)

Jeśli tablicę docelową również masz zamiar użyć tak, jak źródłową, czyli każdy znak z osobna to nie ma się tu do czego przyczepić, ale jej nazwa wskazuje co innego...

Wypełniasz ją całą tekstem i na końcu nie ma miejsca na znak null. Pętla powinna wyglądać tak:

new tekst[9];
for(new i=0; i<8; i++)

a po pętli powinno znaleźć się jeszcze:

tekst[8] = '^0'

 

I taka przestroga na przyszłość, jeśli chcesz dodać tego nulla na końcu stringa to nie używaj nigdy:

tekst[8] = 0

nie chodzi tu o to, że to nie zadziała, bo zrobi dokładnie to co wyżej... chodzi o to, że poprzedni zapis od razu sugeruje, że operujemy na tekście, a nie na liczbach, więc jest od razu czytelniejszy nie tylko dla osoby trzeciej, ale też dla Ciebie gdy za tydzień, miesiąc, rok czy dwa zaglądniesz do kodu i będziesz się zastanawiał co tutaj miałeś na myśli.


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych