如何将文本文件读入2D数组 - C ++

时间:2013-11-26 03:16:54

标签: c++ arrays file-io multidimensional-array

我是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

我走在正确的轨道上?

2 个答案:

答案 0 :(得分:1)

您的数组只是一个指针,没有空格。您应该添加一个成员函数,以使用malloc将空间分配给该指针。大小通过参数传递。一旦你读取文件并获得main函数的大小,调用新的成员函数来为你的数组提供正确的大小。此外,在析构函数中,您应该释放指针。

答案 1 :(得分:0)

您尚未初始化2D阵列。最好的方法是在构造函数中初始化2D数组(new),并在解构器中释放。并且所有读取操作都应包含在readFile函数中。不要将ifstream作为全局,将文件名作为readFile函数的属性。