2009-12-09 10 views
2

Je crée un jeu et j'ai stocké les données cartographiques dans un tableau bidimensionnel de taille [34] [10]. Au départ, je généré la carte en utilisant une fonction simple pour remplir le tableau et enregistré ces données dans un fichier en utilisant le code suivant:Chargement du texte d'un fichier dans un tableau bidimensionnel (C++)

ofstream myFile; 
myFile.open("map.txt"); 

for (int y = 0 ; y < MAP_HEIGHT ; ++y) 
{ 
    for (int x = 0 ; x < MAP_WIDTH ; ++x) 
    { 
     myFile << m_acMapData[x][y]; 
    } 
    myFile << '\n'; 
} 

myFile.close(); 

Cette sortie un fichier texte qui ressemble à ce que je veux. Cependant, lorsque je tente de le relire en utilisant le code suivant, je reçois une charge de violations d'accès et il se bloque lors de l'exécution:

ifstream myFile; 
int i=0; 
int j=0; 
char line[MAP_WIDTH]; 

myFile.open("map.txt"); 
while (!myFile.eof()) 
{ 
    myFile.getline(line, MAP_WIDTH); 
    for (i=0; i<MAP_WIDTH; i++) 
    { 
     m_acMapData[i][j] = line[i]; 
    } 
    ++j; 
    cout << line; 
} 

Est-ce que quelqu'un sait quel est le problème?

+0

ce qui est 'm_acMapData', comment est-il déclaré et initialisés? – atzz

Répondre

3
while (!myFile.eof()) 
{ 
     myFile.getline(line, MAP_WIDTH); 

devrait être:

while (myFile.getline(line, MAP_WIDTH)) 
{ 

Il serait cependant plus prudent de lire dans un std :: string:

string line: 
while (getline(myFile, line)) 
{ 

Vous pouvez également lire mon blog sur ce sujet, au http://punchlet.wordpress.com.

0

Ya je vais certainement crash parce que vous faites mal ici.

ofstream myFile; 
myFile.open("map.txt"); 

for (int y = 0 ; y < MAP_HEIGHT ; ++y) 
{ 
    for (int x = 0 ; x < MAP_WIDTH ; ++x) 
    { 
      myFile << m_acMapData[x][y]; 
    } 
    myFile << '\n'; 
} 
myFile.close(); 

On suppose que MAP_HEIGHT = 3 et MAP_WIDTH = 6 ;

Et vous devez savoir que tableau en C/C++ est rangée importante alors quand vous essayez d'accéder

m_acMapData [4] [0] il accès à la mémoire sur de sa gamme.

donc faire quelque chose comme ceci:

for (int y = 0 ; y < MAP_HEIGHT ; ++y) 
{ 
    for (int x = 0 ; x < MAP_WIDTH ; ++x) 
    { 
      myFile << m_acMapData[y][x]; // here to be changed 
    } 

    myFile << '\n'; 
} 
Questions connexes