Как читать текстовый файл в 2D массив - C ++

0

Я новичок в 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

Я на правильном пути?

  • 1
    Вы пробовали код? В чем проблема?
  • 0
    Иметь fin как глобальное - плохая идея. И while(!fin.eof()) - это рецепт для чтения всей строки неверных данных. using name space std; недопустимо using namespace директивы using namespace . Помещение всего этого в заголовочный файл будет кусать вас. Так проблема в том, что это не компилируется? Попробуйте устранить каждую ошибку так, как она представлена вашим компилятором.
Показать ещё 3 комментария
Теги:
arrays
multidimensional-array
file-io

2 ответа

1
Лучший ответ

Ваш массив - это только указатель, без пробела. Вы должны добавить функцию-член, чтобы выделить пространство этому указателю с помощью malloc. Размер передается через аргументы. После того, как вы прочитаете файл и получите размер в основной функции, вызовите новую функцию-член, чтобы дать правильный размер вашего массива. Кроме того, в деструкторе вы должны освободить указатель.

  • 0
    Большое спасибо! определенно помог!
0

вы не инициализируете 2D-массив. Лучший способ - инициализировать 2D-массив (новый) в конструкторе и выпустить в деконструкторе. И все действия чтения должны быть включены в функцию readFile. Не делайте ifstream глобальным, сделайте имя файла атрибутом функции readFile.

  • 0
    Спасибо! это работает сейчас!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню