Problem mit Maploader
-
Soweit bin ich grad:
class Field { string curMap; char maps[50][15][26]; public: Field(); ~Field(); };Field::Field() { // Load maps string map("map"); for(short c = 0; c < 50; c++) { curMap = map + static_cast<char>('0' + c + 1) + ".txt"; } }Jetzt möchte ich aus curMap char* machen und dann per ifstream öffnen und in char maps[50][15][26] laden.
(Das sind doch 50 arrays aus 15 Zeilen und 26 Elementen, wenn ich das richtig verstanden habe?)
-
ccurMap = curMap.c_str();Funzt nicht:
error C2440: '=' : 'const char *' kann nicht in 'char' konvertiert werden
ccurMap ist vom Typ char.
-
Meierei schrieb:
ccurMap ist vom Typ char.
ja dann mach ein const char* drauß^^
-
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...