【发布时间】:2013-12-09 19:12:45
【问题描述】:
我正在尝试读取一个文件并创建一个 2D 向量来存储用于单词搜索游戏的游戏板,但我似乎无法让它读取比第一行更多的内容。我确定它很小,但我为“板”矢量放置了一个测试显示,显示的只是文本文件的第一行。
这是我的一些代码:
'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
滑板GCLCIA
LLABESABIVOTNVVE
VOFRISBEETMIEVZG
BWADEVAUCYCSWING
XNJFJPZHBTBFTSAW
【问题讨论】:
-
为什么会有嵌套的for循环?您一次阅读一个字符。去阅读这个 - cplusplus.com/doc/tutorial/files
-
我猜你需要在 board.push_back(row); 后清空行;
-
在将
row附加到rows之后,您并没有清除它,并且您没有考虑换行符。
标签: c++ vector fstream ifstream