Чтение в ascii 'лабиринте' в 2d массив - PullRequest
2 голосов
/ 09 октября 2009

Я пишу код для чтения в виде блока размером 7x15 в файле, который будет представлять собой «лабиринт».

#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;
}

это был мой первоначальный черновик, но он не работал, так как он продолжал возвращаться? для каждого символа он читал. Это лабиринт, в котором я тестирую:

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

EDIT: Кут печатает это:

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


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

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

Разве я не убегаю \ n's?

Я кодирую уже несколько часов, так что я думаю, что это простая ошибка, которую я не догоняю, это сбивает меня с толку. Спасибо!

Ответы [ 4 ]

3 голосов
/ 09 октября 2009

Попробуйте использовать абсолютный путь, например "c: \ MyMazes \ maze".

Добавьте систему ("cd"), чтобы увидеть, где находится текущий каталог. Если у вас возникли проблемы с поиском текущего каталога, ознакомьтесь с этим SO обсуждением

Вот полный код - здесь должен отображаться весь ваш лабиринт (если возможно) и текущий каталог.

 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 голосов
/ 09 октября 2009

Проверьте, не удалось открыть файл или нет. Вы можете узнать это, проверив, хорошо ли это:

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

Если открытие файла не удалось, попробуйте написать по абсолютному пути к файлу (C: / Documents and Settings /.../ maze), чтобы проверить, работает ли это. Если это так, то это просто путь к файлу, и вам придется поиграть с этим.

0 голосов
/ 09 октября 2009

попробуйте добавить строку

if (!loadMaze) throw 1;

после объявления loadMaze, это вызовет исключение, если файла там нет. Это хак, на самом деле вы должны выбросить реальную ошибку. Но это работает, чтобы проверить.

0 голосов
/ 09 октября 2009

Можете ли вы проверить правильность извлечения из файла: используя good() API 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
}

OR

в самом начале:

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