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
C++

[ROZWIĄZANE] Wyciągnięcie danych z tablicy 2d

c++

  • Zamknięty Temat jest zamknięty
11 odpowiedzi w tym temacie

#1 Alelluja

    Miszcz jotbe

  • Power User

Reputacja: 491
Wszechobecny

  • Postów:981
  • GG:
Offline

Napisano 06.04.2020 12:59

Cześć, mam problem z wyciągnięciem danych z tablicy 2d, która jest stringiem. Próbowałem wyciągać te dane sposobem z PAWN'a używając sizeof w pętli ale kończy się to segmentation fault. Przeszukałem chyba wszystkie tematy związane z tablicami 2d i wyciąganiem z nich danych ale nie było tego co potrzebuję. 

 

Podaję link do kodu. 

 

https://pastebin.com/G2aP9s6K


  • +
  • -
  • 0

Moje Pluginy | Paczki:
------> http://amxx.pl/topic...od/#entry687942 <------ 500 Postów 27.05.2015
------> http://amxx.pl/topic...monety-lombard/<------
------> http://amxx.pl/topic...-na-ammo-packi/<------


#2 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 06.04.2020 13:34

Okej, to nie będę Ci dawał pełnego rozwiązania na tacy, ale zrób to:

cout << sizeof gamesData << endl;

w jakimś case w switchu i zobacz ile Ci wypisze ;)


  • +
  • -
  • 2

#3 Alelluja

    Miszcz jotbe

  • Autor tematu
  • Power User

Reputacja: 491
Wszechobecny

  • Postów:981
  • GG:
Offline

Napisano 06.04.2020 13:42

Po zrobieniu tak wypisało:

 

Dostępne gry (Gry Akcji):
1824

  • +
  • -
  • 0

Moje Pluginy | Paczki:
------> http://amxx.pl/topic...od/#entry687942 <------ 500 Postów 27.05.2015
------> http://amxx.pl/topic...monety-lombard/<------
------> http://amxx.pl/topic...-na-ammo-packi/<------


#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 06.04.2020 13:45

No dokładnie, i twoja pętla jedzie od i = 0 aż do tej wartości, co oczywiście dla pierwszych wartości zadziała, a dla reszty dostaniesz seg faulta, bo odwołujesz się poza tablice

 

EDIT:

Jeszcze dodam, że jeśli robisz sizeof na jakimś obiekcie, to dostaniesz rozmiar tego obiektu. W sensie ile fizycznie ta klasa okupuje bajtów. sizeof dla stringa nie zwraca jego długości, tylko zwraca ile bajtów zajmuje sam w sobie obiekt (jego zmienne prywatne, publiczne etc)


Użytkownik TibacK edytował ten post 06.04.2020 13:50

  • +
  • -
  • 1

#5 Alelluja

    Miszcz jotbe

  • Autor tematu
  • Power User

Reputacja: 491
Wszechobecny

  • Postów:981
  • GG:
Offline

Napisano 06.04.2020 13:51

Dobra nie spodziewałem się, że to będzie takie proste ale wystarczyło zamiast 

for(int i = 0; i < sizeof gamesData; i++)

Dać to:

for(int i = 0; i < 3; i++)

Ale nie wiem czy jest to dobry sposób bo dla reszty zrobiłem tak że powiększałem pułap startowy o 3 i dodawałem 3 do limitu aby wczytać tylko te dane które potrzebuje.


  • +
  • -
  • 0

Moje Pluginy | Paczki:
------> http://amxx.pl/topic...od/#entry687942 <------ 500 Postów 27.05.2015
------> http://amxx.pl/topic...monety-lombard/<------
------> http://amxx.pl/topic...-na-ammo-packi/<------


#6 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 06.04.2020 14:04

Ja bym zrobił coś takiego:

struct gameData{
    string id;
    string name;
    string number; //lepiej zeby bylo np intem, unsigned intem
};

gameData gamesData[] = {
    {"1", "Battlefield 1", "100"},
    {"2", "WatchDogs 2", "120"},
    {"3", "Grand Theft Auto 5", "80"},
    {"4", "Black Desert Online", "50"},
    {"5", "World of Warcraft", "50"},
    {"6", "Eternal Magic", "50"},
    {"7", "Ori and the Blind Forest", "170"},
    {"8", "Resident Evil 3", "50"},
    {"9", "Firewatch", "40"},
    {"10", "The Wither 3", "50"},
    {"11", "Cyberpunk 2077 (Preorder)", "199"},
    {"12", "Disco Elysium", "150"},
    {"13", "Fifa 2020", "160"},
    {"14", "Rocket League", "50"},
    {"15", "NBA 2k19", "40"},
    {"16", "Car Mechanic Simulator", "50"},
    {"17", "Farming Simulator 2020", "100"},
    {"18", "Tank Mechanic Simulator", "30"},
};
            for(int i = 0; i < sizeof(gamesData) / sizeof(gamesData); i++)
            {
                if(typeGamesId[i] == choice)
                {
                    cout << gamesData[i].id << ". " << gamesData[i].name << " - Cena: " << gamesData[i].number << " PLN (Wpisz " << i + 1 << ")" << endl;
                }
            }

Chociaż na to:

sizeof(gamesData) / sizeof(gamesData)

trzeba uważać czasem ;)


Rivit (06.04.2020 14:05):
A osobiście użyłbym tutaj std::vector

  • +
  • -
  • 1

#7 Alelluja

    Miszcz jotbe

  • Autor tematu
  • Power User

Reputacja: 491
Wszechobecny

  • Postów:981
  • GG:
Offline

Napisano 06.04.2020 14:25

Ten sposób z 

sizeof(gamesData) / sizeof(gamesData)

 

Nie działa poprawnie, dokładniej to pokazuje tylko 1 pozycję z 3 możliwych. Ale te struktury to sobie zapożyczę bo nawet spoko sprawa. Dzięki za pomoc.

 


  • +
  • -
  • 0

Moje Pluginy | Paczki:
------> http://amxx.pl/topic...od/#entry687942 <------ 500 Postów 27.05.2015
------> http://amxx.pl/topic...monety-lombard/<------
------> http://amxx.pl/topic...-na-ammo-packi/<------


#8 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 06.04.2020 14:38

A to dziwne, bo jak sprawdzałem u siebie to wypisało wszystkie kategorie.

Uzywałem g++9 na ubuntu. 


Rivit (06.04.2020 16:03):
spoko ;)

  • +
  • -
  • 2

#9 Alelluja

    Miszcz jotbe

  • Autor tematu
  • Power User

Reputacja: 491
Wszechobecny

  • Postów:981
  • GG:
Offline

Napisano 06.04.2020 15:50

Ja robię to na stronie ale zostałem przy tym co miałem czyli zwiększałem o 3 i git jest.

 

Dzięki za pomoc można zamknąć.


  • +
  • -
  • 0

Moje Pluginy | Paczki:
------> http://amxx.pl/topic...od/#entry687942 <------ 500 Postów 27.05.2015
------> http://amxx.pl/topic...monety-lombard/<------
------> http://amxx.pl/topic...-na-ammo-packi/<------


#10 Amaroq

    AMXX Contributor

  • Użytkownik

Reputacja: 304
Wszechpomocny

  • Postów:380
  • GG:
  • Steam:steam
  • Imię:Karol
  • Lokalizacja:Łódź
Offline

Napisano 07.04.2020 15:59

Ten sposób z 

sizeof(gamesData) / sizeof(gamesData)

Nie działa poprawnie, dokładniej to pokazuje tylko 1 pozycję z 3 możliwych. Ale te struktury to sobie zapożyczę bo nawet spoko sprawa. Dzięki za pomoc.

 

Powinno być

sizeof(gamesData) / sizeof(gameData)

Wtedy zadziała poprawnie :P


  • +
  • -
  • 3
Plugin informujący o zabiciu zakładnika (wysyła do admina na say nick gracza oraz zapisuje o tym logi) - Hostage Killer v1.3.3
DarkGL to mój autorytet.

#11 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 381
Offline

Napisano 07.04.2020 16:02

Tak, masz rację, wredna literówka :D

I to tłumaczy dlaczego tylko jeden wypisywało :D


  • +
  • -
  • 1

#12 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 566
Godlike

  • Postów:12 015
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 07.04.2020 16:26

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: c++

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

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