我是C ++的新手,在将文本文件读入2D数组时遇到了一些麻烦。我正在创建一个益智游戏。文本文件包含如下:
3
一个 ?乙
C D E
F G H
文本文件顶部的数字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
我走在正确的轨道上?
答案 0 :(得分:1)
您的数组只是一个指针,没有空格。您应该添加一个成员函数,以使用malloc将空间分配给该指针。大小通过参数传递。一旦你读取文件并获得main函数的大小,调用新的成员函数来为你的数组提供正确的大小。此外,在析构函数中,您应该释放指针。
答案 1 :(得分:0)
您尚未初始化2D阵列。最好的方法是在构造函数中初始化2D数组(new),并在解构器中释放。并且所有读取操作都应包含在readFile函数中。不要将ifstream作为全局,将文件名作为readFile函数的属性。