Я новичок в C++ и испытываю определенные трудности с чтением текстового файла в 2D-массив. Я создаю игру-головоломку. Текстовый файл содержит следующее:
3
A? В
CDE
FGH
Номер 3 поверх текстового файла - это размер платы, которую я должен создать, и отдых для головоломки.
Вот мой код, который я попытался, любая помощь приветствуется.
#include <iostream>
#include <iomanip>
#include <fstream>
using name space std;
#ifndef BOARD_H
#define BOARD_H
ifstream fin("boardgame.txt"); // Input file
class Board {
private:
int SIZE; //Board size
char **b; //2D Array
public:
Board(); //Constructor
~Board(); //Destructor
void readFile(); //Function to read the file
}; //Board
Board::Board (){
fin>>SIZE; //Professor specifically asked to read the board size in the constructor
readFile();
}
Board::~Board(){
// Will create this later
}
void Board::readFile(){
cout<<"SIZE is: "<<SIZE<<endl;
while(!fin.eof()){
for (int row = 0; row < SIZE; row++){
for (int col = 0; col < SIZE; col++){
fin>>b[row][col];
}
}
}
for (int row = 0; row < SIZE; row++){
for (int col = 0; col < SIZE; col++){
cout<<b[row][col]<<endl;
}
} // For testing only.
}// ReadFile
#endif
Я на правильном пути?
Ваш массив - это только указатель, без пробела. Вы должны добавить функцию-член, чтобы выделить пространство этому указателю с помощью malloc. Размер передается через аргументы. После того, как вы прочитаете файл и получите размер в основной функции, вызовите новую функцию-член, чтобы дать правильный размер вашего массива. Кроме того, в деструкторе вы должны освободить указатель.
вы не инициализируете 2D-массив. Лучший способ - инициализировать 2D-массив (новый) в конструкторе и выпустить в деконструкторе. И все действия чтения должны быть включены в функцию readFile. Не делайте ifstream глобальным, сделайте имя файла атрибутом функции readFile.
fin
как глобальное - плохая идея. Иwhile(!fin.eof())
- это рецепт для чтения всей строки неверных данных.using name space std;
недопустимоusing namespace
директивыusing namespace
. Помещение всего этого в заголовочный файл будет кусать вас. Так проблема в том, что это не компилируется? Попробуйте устранить каждую ошибку так, как она представлена вашим компилятором.