我正在尝试阅读文件并创建一个2D矢量来存储游戏板以进行单词搜索游戏,但我似乎无法让它阅读比第一行更多。我确定这是一个很小的东西,但是我为'board'矢量放了一个测试显示,所有显示的都是文本文件的第一行。
以下是我的一些代码:
'Board.cpp'
#include "stdafx.h"
#include "Board.h"
#include <fstream>
#include <iostream>
using namespace std;
Board::Board(void)
: rows(0)
{
}
Board::~Board(void)
{
}
void Board::readInFile(void)
{
ifstream indata;
indata.open("Puzzle.txt");
indata >> rows;
for(int i = 0; i < rows; i++){
char tmpChar;
for(int j = 0; j < rows; j++){
indata >> tmpChar;
row.push_back(tmpChar);
}
board.push_back(row);
}
indata.close();
}
'Board.h'
#pragma once
#include <vector>
using namespace std;
class Board
{
public:
Board(void);
~Board(void);
void readInFile(void);
protected:
vector<vector<char>> board;
vector<char>row;
protected:
int rows;
};
以下是文本文件的设置方式:
16
BDXWASEESPHWEBGB
SIGJVAWDFLCTZIAM
ENKVESMARNAEBRRI
IKOEOPZLUKMVJDDL
KLIRELOBSNPOFWEC
SBOHKLLRHSIFPANA
RSKWMEEEPEITPTPE
EZPIELLLYMOOQCDH
TAWDLGGLZBUNDHOJ
ASIOJNFOPKAJAPBP
WLRCIILROZXLSCID
SKATEBOARDGCLCIA
LLABESABIVOTNVVE
VOFRISBEETMIEVZG
BWADEVAUCYCSWING
XNJFJPZHBTBFTSAW
答案 0 :(得分:1)
有更好的方法来处理输入文件。首先,不要使用vector<char>
,而只需使用std::string
,而不是使用vector<vector<char> >
,只需使用vector<string>
。我不确定我理解为什么row
是该类的成员,如果它仅用于填充board
。无论何时您需要最后一件物品,您都可以board.back()
或*board.rbegin()
。
void Board::readInFile(void)
{
ifstream indata("Puzzle.txt", ios::in);
if(!ifstream.is_open())
return;
indata >> rows; //you don't really need to do this if you take
//the row count out of the file, but if you can't
//change the file, leave it in so as not to corrupt
//the loop that follows
string line;
while(getline(indata, line)){
board.push_back(line);
}
indata.close();
}
实际上,您不需要让文件存储rows
变量。
如果readInFile将文件名作为参数,那么你的函数也会更加可重用,因此它可以打开任何东西,而不是只打开一个特定的文件名。