Problem mit Maploader



  • Hallo

    wie soll auch ein Pointer auf eine Zeichenkette an einen char übergeben werden?
    Du sollst das ja auch so einsetzen :

    std::string filename = "test.txt";
    std::ifstream file(filename.c_str());
    

    bis bald
    akari



  • Yay. Danke ich werde experimentieren.



  • Was stimmt nun hier wieder nicht 😞

    class Field
    {
    	string curMap;
    	char maps[50][15][26];
    public:
    	Field();
    	~Field();
    };
    
    Field::Field()
    {
    	// Load maps
    	string map("map");
    	for(short i = 0; i < 50; i++)
    	{
    		curMap = map + static_cast<char>('0' + i + 1) + ".txt";
    		ifstream mapFile(curMap.c_str());
    
    		for(short r = 0; r < 15; r++)
    			mapFile.getline(&maps[i][r][], r);
    	}
    }
    

    error C2059: Syntaxfehler : ']'

    Wenn man das Element nicht angibt, wird einfach die ganze Zeile reingeschrieben, oder? Oder muss ich das manuell per get machen und für die Elemente auch noch ne Schleife?



  • Jetzt kommt zumindest kein Fehler mehr:

    Field::Field()
    {
    	// Load maps
    	string map("map");
    	// For each map
    	for(short i = 0; i < 50; i++)
    	{
    		curMap = map + static_cast<char>('0' + i + 1) + ".txt";
    		ifstream mapFile(curMap.c_str());
    
    		// For each row
    		for(short r = 0; r < 15; r++)
    		{
    			// For each element
    			for(short e = 0; e < 26; e++)
    				mapFile.get(&maps[i][r][e], e);
    		}
    	}
    }
    

    Ist das so korrekt?



  • Nein. Warum nicht einfach so?

    for(int i = 0; i < 50; ++i)
        ifstream in("map" + ('0' + i / 10) + ('0' + i % 10) + ".txt");
    

    Du brauchst nicht hunderttausend Variablen, die immer denselben Wert haben.



  • Ok.

    Field::Field()
    {
    	// Load maps - For each map
    	for(short i = 0; i < 50; i++)
    	{
    		ifstream mapFile("map" + ('0' + i / 10) + ('0' + i % 10) + ".txt");
    
    		if(mapFile)
    			cout << curMap << " geladen!" << endl;
    		else
    			cout << curMap << " nicht geladen!" << endl;
    
    		// For each row
    		for(short r = 0; r < 15; r++)
    		{
    			// For each element
    			for(short e = 0; e < 26; e++)
    				mapFile.get(&maps[i][r][e], e);
    		}
    	}
    }
    

    error C2110: Zwei Zeiger koennen nicht addiert werden



  • Das war auch nicht wirklich das Wahre:

    curMap = map + static_cast<char>('0' + i + 1) + ".txt";
    

    Es kommt dann nämlich mapK.txt, mapL.txt und so weiter raus...



  • Hallo

    das muß auch so aussehen

    #include <sstream>
    #include <iomanip>
    ..
      for(int i = 0; i < 50; ++i)
      {
        std::stringstream filename;
        filename << "map";
        filename.width(2);
        filename.fill('0');
        filename << i << ".txt";
        std::ifstream in(filename.str().c_str());
        ... // Mache etwas wenn Datei durch in geöffnet wurde
      }
    

    bis bald
    akari



  • Danke ich werde es sofort ausprobieren.

    Leider sind meine Kenntnisse mit stringstreams und Manipulatoren sehr begrenzt.



  • Meierei schrieb:

    error C2110: Zwei Zeiger koennen nicht addiert werden

    Mein Fehler.

    Das war auch nicht wirklich das Wahre:

    Doch, das ist das Wahre für einstellige Zahlen. Wies mit zweistelligen geht, hab ich auch schon gezeigt.

    Nimm am besten den Snippet von akari, ich hab keinen Bock mehr.



  • 😞

    Hmm. Habe nur noch Probleme beim Einlesen.

    Field::Field() 
    { 
        // Load maps
    	// For each map
        for(short i = 0; i < 1; i++) 
        { 
    		stringstream curMap;
    		curMap << "map";
    		curMap.width(2); 
            curMap.fill('0');
    		curMap << i + 1 << ".txt";
    
    		ifstream mapFile(curMap.str().c_str()); 
    		mapFile.
    
    		if(mapFile) 
                cout << curMap.str() << " geladen!" << endl; 
            else 
                cout << curMap.str() << " nicht geladen!" << endl; 
    
            // For each row 
            for(short r = 0; r < 15; r++) 
            { 
                // For each element 
                for(short e = 0; e < 26; e++) 
                    mapFile.get(&maps[i][r][e], e); 
    			mapFile.
            } 
        } 
    }
    

    Und zum Zeichnen:

    void Field::drawMap()
    {
    	for(short r = 0; r < 15; r++)
    	{
    		for(short e = 0; e < 26; e++)
    		{
    			cout << maps[0][r][e] << "  ";
    		}
    	}
    	cout << "Drawed" << endl;
    }
    

    Problem beim einlesen. Wie wechsle ich zur nächsten Zeile?

    (Die Textdatei besteht aus 15 Zeilen mit jeweils 26 Zeichen)



  • Kann mir hier bitte jemand helfen.



  • Habs selber gecheckt.

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    	char maps[50][15][26];
    
    	ifstream mapFile("map01.txt", ios::in | ios::out | ios::binary);
    
    	mapFile.getline(maps[0][0], 60);
    
    	cout << maps[0][0][0];
    	cout << maps[0][0][1];
    
    	return 0;
    }
    

    Ist ja doch nicht so schwer...


Anmelden zum Antworten