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

Wczytywanie pliku w grze i error

Object Storage Arubacloud
0 głosów
217 wizyt
pytanie zadane 23 stycznia 2018 w C i C++ przez Nast Początkujący (270 p.)

Witam wszystkich.

Mam problem dotyczy on wczytywania pliku do gry. Wydaję mi się że wszystko jest okej lecz perror zwraca błąd 

plik istnieje w folderze lecz go nie wczytuje.

Proszę o pomoc ponieważ nie mam pojęcia jak temu zaradzić poniżej wysyłam kod funkcji która ładuje plik i jej wywołanie w mainie.
 

void Level::load(string fileName, Player &player)
{
	//WCZYTUJE LEVEL
	ifstream plik;

	plik.open(fileName);
	if (plik.fail());
	{
		perror(fileName.c_str());
		system("PAUSE");
		exit(1);
	}

	string mapa;

	while (getline(plik, mapa))
	{
		_levelData.push_back(mapa);
	}

	plik.close();
	// POZYCJA GRACZA NA PLANSZY
	char pozycja;
	// WCZYTUJE CALE LINIE
	for (int i = 0; i < _levelData.size(); i++)
	{
		// WCZYTUJE POJEDYNCZE ZNAKI W LINIACH
		for (int j = 0; j < _levelData[i].size(); j++)
		{
			pozycja = _levelData[i][j];

			switch (pozycja)
			{
			case '@':
				player.getposition(j, i);
				break;
			}
		}
	}
}

___________________________________________________________________

#include <iostream>
#include <string>
#include <cstdlib>
#include <conio.h>
#include "GameCore.h"
#include "Level.h"


using namespace std;

int main()
{
	
	GameCore gameCore("poziom1.txt");
	gameCore.playGame();
	





 

2 odpowiedzi

0 głosów
odpowiedź 23 stycznia 2018 przez monika90 Pasjonat (22,940 p.)
wybrane 23 stycznia 2018 przez Nast
 
Najlepsza
if (plik.fail()); //tu masz średnik, którego nie powinno tu być

 

komentarz 23 stycznia 2018 przez Nast Początkujący (270 p.)
Zastanawia mnie tylko to dlaczego Visual Studio nie pokazało mi takiego błędu. Dzięki za odpowiedź taka głupota a zabrała mi tyle czasu
komentarz 23 stycznia 2018 przez niezalogowany

Jako błąd na pewno nie (bo taka konstrukcja jest dopuszczalna - co wcale nie oznacza, że jest sensowana), ale mój VS w takim przypadku pokazałby ostrzeżenie:

warning C4390: ";": znaleziono kontrolowaną pustą instrukcję; czy to było zamierzone?
0 głosów
odpowiedź 23 stycznia 2018 przez draghan VIP (106,230 p.)
        perror(fileName.c_str());
        system("PAUSE");
        exit(1);

Kiedy std::ifstream sfailuje, nie ustawia zmiennej std::errno. To mechanizm z C i nie jest on najlepszy do stosowania w C++, który posiada system wyjątków. Tak samo - używanie funkcji exit jest niewskazane - to funkcja projektowana do kończenia programów C - w C++ nie pozwala na wywołanie destruktorów obiektów, które kończą życie razem z programem. Staraj się tak sterować przepływem sterowania w programie, żeby kończyć działanie z funkcji main przez zwykły return.

Wracając do Twojego problemu - jego rozwiązaniem może być ustawienie katalogu roboczego na katalog, w którym trzymasz plik "poziom.txt" lub skopiowanie tego pliku do lokalizacji, w której buduje się plik wykonywalny, czyli u Ciebie gdzieś w katalogu "Debug".

 

komentarz 23 stycznia 2018 przez Nast Początkujący (270 p.)
Dzięki za odpowiedź i rady lecz katalog roboczy jest ustawiony tam gdzie trzymam wszystkie pliki projektu więc to raczej jest ok. Jak wrzucam plik do folderu debug lub gdziekolwiek indziej program nie znajduję drogi do niego.

Podobne pytania

0 głosów
1 odpowiedź 235 wizyt
0 głosów
3 odpowiedzi 691 wizyt
0 głosów
2 odpowiedzi 1,635 wizyt
pytanie zadane 16 kwietnia 2019 w C# przez WojMen Początkujący (330 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...