2009-10-09 29 views
2

Je suis à écrire du code à lire dans un bloc 7x15 du texte dans un fichier qui représentera un « labyrinthe ».lecture dans un ascii « labyrinthe » dans un tableau 2d

#include <iostream> 
#include <fstream> 
#include <string> 
#include "board.h" 

int main() 
{ 
    char charBoard[7][15]; //the array we will use to scan the maze and modify it 
    ifstream loadMaze("maze"); //the fstream we will use to take in a maze 
    char temp; //our temperary holder of each char we read in 

    for(int i = 0;i < 7; i++) 
    { 

     for(int j = 0; j < 15; j++) 
    { 
     temp= loadMaze.get(); 
     charBoard[i][j] = temp; 
     cout << charBoard[i][j]; //testing 
    } 
    cout << endl; 
} 

return 0; 
} 

C'était mon brouillon original mais cela n'a pas fonctionné car il a continué à revenir? pour chaque caractère lu. Ce est le labyrinthe des tests im avec:

 
    ############# 
       # 
############ # 
       # 
######### #### 
# !  # 
############ 

EDIT: Le Cout imprime ceci:

 
    ############# 


# 
############ 
# 

    # 
######### 
#### 
# !  
# 
######### 

Suis-je ne pas fuir \ n de?

J'ai été le codage pendant quelques heures donc je pense que d'une simple erreur, je ne suis pas attraper qui me trébucher en ce moment. Merci!

+0

quel est le contenu du fichier "maze"? –

+0

Donc vous dites qu'il imprime toujours 'temp =?'? – Smashery

+0

Correct, j'ai édité la question pour montrer ce que je lis et ce qu'il imprime – dannyzlo

Répondre

3

Essayez un chemin absolu comme "c: \ MyMazes \ labyrinthe".

Throw dans un système (« cd ») pour voir où le répertoire actuel. Si vous rencontrez des difficultés pour trouver le répertoire courant, consultez ceci SO discussion

Voici le code complet - cela devrait afficher tout votre labyrinthe (si possible) et le répertoire courant.

char charBoard[7][15];  //the array we will use to scan the maze and modify it 
system("cd"); 
    ifstream loadMaze("c:\\MyMazes\\maze"); //the fstream we will use to take in a maze 

if(!loadMaze.fail()) 
{ 
    for(int i = 0;i < 7; i++) 
    { 
     // Display a new line 
     cout<<endl; 
     for(int j = 0; j < 15; j++) 
     { 
      //Read the maze character 
      loadMaze.get(charBoard[i][j]); 
      cout << charBoard[i][j]; //testing 
     } 
     // Read the newline 
     loadMaze.get(); 
    } 
    return 0; 
} 
return 1; 
0

Pouvez-vous vérifier si l'extraction du fichier est correcte: en utilisant good() API de ifstream

for(int j = 0; j < 15; j++) 
{ 
    if(!loadMaze.good()) 
    { 
     cout << "path incorrect"; 

    } 

    temp= loadMaze.get(); 


    cout << "temp = " << temp << endl; //testing 
    charBoard[i][j] = temp; 
    cout << charBoard[i][j]; //testing 
} 

OU

au début lui-même:

ifstream loadMaze("maze"); 
if(!loadMaze.good()) 
{ 
    //ERROR 
} 
+0

Merci! Je reçois en effet! Bon() ... mais pourquoi? Maze est dans le même dossier que tous les fichiers – dannyzlo

+0

Jetez dans un système ("cd") pour voir où se trouve le répertoire en cours – Jacob

+0

Cela ne fait rien pour moi, pouvez-vous éléborer sur le système ("cd"); ? – dannyzlo

0

essayer d'ajouter la ligne

if (!loadMaze) throw 1; 

après la déclaration de loadMaze, cela lancera une exception si le fichier est pas là. C'est un hack, vraiment vous devriez jeter une vraie erreur. Mais ça marche pour tester.

0

Vérifiez si l'ouverture du fichier a échoué ou non. Vous pouvez trouver cela en vérifiant s'il est bon:

http://www.cplusplus.com/reference/iostream/ios/good/

Si l'ouverture de fichier a échoué, essayez d'écrire dans le chemin absolu du fichier (C:/Documents and Settings /.../ labyrinthe), pour voir si cela fonctionne. Si c'est le cas, c'est juste le chemin du fichier qui est faux, et vous devrez jouer avec ça.