• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

std::vector i konwersja

VPS Starter Arubacloud
0 głosów
582 wizyt
pytanie zadane 1 maja 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)

Cześć. Kod z mojego starego pytania: http://forum.pasja-informatyki.pl/130207/odczytywanie-wartosci-oddzdielonych-spacjami?show=130207#q130207 Przerobiłem na taki:

Save::Save(std::string savePosition)
{
	std::ifstream plik(savePosition);

	if (!plik)
	{
		std::cout << "Cannnot open file" << std::endl;
		exit(0);
	}

	std::string wiersz;
	std::vector<std::string> board[3];

	int y = 0;
	int x = 0;

	while (getline(plik, wiersz))
	{
		for (int i = 0; i < wiersz.length(); i++)
		{
			if (wiersz[i] == ' ')
			{
				x++;
				continue;
			}

			board[y].push_back(wiersz[i]);
		}
		x = 0;
		y++;
	}

	float positions[5][3];

	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			std::stringstream iss;
			std::string inscription = board[i][j];
			float number;
			iss << inscription;
			iss >> number;

			positions[i][j] = number;
		}
	}
	for (int i = 0; i < 5; i++)
	{
		position.push_back(glm::vec3(positions[i][0], positions[i][1], positions[i][2]));
	}
}

tylko że przy board.push_back nie chce mi przekonwertować z charu na string. Ktoś wie jak to napisać, żeby działało? Nie proszę o gotowy kod tylko o jakąś wskazówkę?

2 odpowiedzi

0 głosów
odpowiedź 1 maja 2016 przez criss Mędrzec (172,590 p.)
board[y].push_back(std::string(1, wiersz[i]));

Sorry za gotowy kod, ale ciężko o wskazówke przy jednej linijce kodu.

komentarz 1 maja 2016 przez Avernis Nałogowiec (27,400 p.)
crashuje program i wywala mnie do xstring
komentarz 1 maja 2016 przez criss Mędrzec (172,590 p.)
Do czego cie wywala?... Źle coś zapisałeś, albo już wcześniej miałeś błąd. To nie ma prawa nie działać.
komentarz 1 maja 2016 przez Avernis Nałogowiec (27,400 p.)

proszę

komentarz 1 maja 2016 przez criss Mędrzec (172,590 p.)
Swoją drogą taki mocno niebezpieczny ten kod - jeśli w pliku będzie więcej niż 3 linijki tekstu, to wyjdziesz poza tablice.
komentarz 1 maja 2016 przez Avernis Nałogowiec (27,400 p.)
Nie znajdzie się więcej niż 3 bo tu chodzi o pozycję obiektu.
komentarz 1 maja 2016 przez criss Mędrzec (172,590 p.)
Wszystko widać. Z resztą nie potrzebuje dowodu. Wystarczyło powiedzieć, że to jakiś pliczek.

Polecam: czytanie errorów i samodzielne myślenie, bo z tobą dziwnym trafem zawsze są problemy.
komentarz 1 maja 2016 przez Avernis Nałogowiec (27,400 p.)
Ja właśnie nie widzę żadnych logów z errorami :/ A problemy są bo lubię majsterkować z kodem i go refaktoryzować :P
komentarz 1 maja 2016 przez criss Mędrzec (172,590 p.)
Tzn. sam ci otworzył jakiś randomowy plik xstring bez żadnego errora... ? Dziwne to visual studio.. Anyway - nie jestem ci w stanie pomóc, nie mam pojęcia o co chodzi.
komentarz 1 maja 2016 przez Avernis Nałogowiec (27,400 p.)
xstring to plik vectora, ale do jakich czarów służy to nie wiem?
komentarz 1 maja 2016 przez MetGang Nałogowiec (34,360 p.)
xstring to plik std::string odpowiedzialny za konwersję. A co do kodu, nie ma on prawa nie działać bez ingerencji z zewnątrz.
0 głosów
odpowiedź 2 maja 2016 przez maly Nałogowiec (37,190 p.)

Nie rozumiem czemu taka skomplikowana machineria, nie prościej coś w tym stylu?

glm::vec3 wektor;
while(plik >> wektor.x >> wektor.y >> wektor.z)
{
	position.push_back(wektor);
}

 

komentarz 2 maja 2016 przez Avernis Nałogowiec (27,400 p.)
Bo jest to machineria która zapisuje wszystko do 1 pliku
komentarz 2 maja 2016 przez maly Nałogowiec (37,190 p.)
Chyba raczej odczytuje a z tego co zrozumiałem z Twojego kodu to poprostu chcesz odczytać po 3 liczby, skonwertować do glm::vec3 i dodać do wektora position.
komentarz 2 maja 2016 przez Avernis Nałogowiec (27,400 p.)
odczytuje racje :/
komentarz 2 maja 2016 przez Avernis Nałogowiec (27,400 p.)
Działą to tak: mamy zmienną static która z każdym obiektem jest ++. Jak wczytujemy z pliku to obiekt z "id" 0 ma wartość z lini 1, 2 z 3 itd
komentarz 2 maja 2016 przez maly Nałogowiec (37,190 p.)
Może lepiej zamiast tłumaczyć kod napisz co chcesz osiągnąć bo nie możliwe żeby kod musiał być tak zakręcony.
komentarz 2 maja 2016 przez Avernis Nałogowiec (27,400 p.)
Chcę osiągnąć to ca powyżej napisałem. Działa ale tylko dla 5 obiektów, a w grze nie będę wiedział ile jest tych obiektów. Zawsze mogą się zrespić nowi przeciwnicy itp.
komentarz 2 maja 2016 przez maly Nałogowiec (37,190 p.)
Jeśli niewiesz ile będzie objektów to skąd w pliku wezmą sie ich pozycje?
komentarz 2 maja 2016 przez Avernis Nałogowiec (27,400 p.)
Z funkcji Save::savePositions
komentarz 2 maja 2016 przez maly Nałogowiec (37,190 p.)
Skoro wiesz ile i jak zapisałeś to jaki problem masz z odczytem?
komentarz 2 maja 2016 przez Avernis Nałogowiec (27,400 p.)
Już go rozwiązałem najzwyklejszą tablicą dynamiczną xD

Podobne pytania

0 głosów
1 odpowiedź 907 wizyt
pytanie zadane 4 kwietnia 2017 w C i C++ przez Sidzej Użytkownik (850 p.)
0 głosów
3 odpowiedzi 1,352 wizyt
pytanie zadane 2 maja 2017 w C i C++ przez Pajdas Mądrala (5,930 p.)
–3 głosów
1 odpowiedź 815 wizyt
pytanie zadane 1 czerwca 2020 w C i C++ przez WiktroH Mądrala (6,550 p.)

93,023 zapytań

141,986 odpowiedzi

321,288 komentarzy

62,369 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...