申し訳ありませんが、私は C++ 初心者です! 私は解決策を探しましたが、私のニーズに最も適したものを見つけることができません。txt ファイルの幅 (行内の文字の最大量) と高さ (ファイルあたりの行の最大量) を読み取ろうとしています。変数を使用して、動的サイズの txt ファイル/レベルを作成することを計画しています。
これより前に、幅と高さを固定していました。
TXT ファイル: 部屋のレイアウトの文字の単純な出力 (スペース = 床、# = 壁、X = ドア):
########
# #
# X
# #
########
問題: これは単純な問題だと思っていましたが、ループを破る前に各変数 (hNum、wNum) を 2 つしか読み取らず、プログラムを続行できません。
-私は何を間違っていますか?
-何とかseekgまたは別のループを使用する必要がありますか?
-ベクターを 2D ベクターに変更する必要がありますか?
-これを達成するための最良の方法はどれですか?
ルーム.cpp
//LOAD CURRENT ROOM FROM FILE
ss << RoomNo;
string str = ss.str();
string fname = ("Room");
fname.append(str);
fname.append(".txt");
infile.open(fname);
infile.clear();
infile.seekg(0);
if(infile.is_open())
{
// Sets width and height depndant on txt file size
string line;
//NOT WORKING!
while( !infile.eof())
{
hNum++;
getline ( infile, line);
wNum += line.length();
break;
}
height=hNum;
width=wNum;
//END
// Loop to end of file- to get you all the lines from txt file.
while(!infile.eof())
{
int i;
for(int row = 0; row < width; row++)
{
infile.getline(RoomFile, 256);
i = 0;
for(int col = 0; col < height; col++)
{
data.push_back(RoomFile[i]);
i++;
}
}
}
}
else
{
cout << "ERROR: infile not open" << endl;
}
infile.close();
アップデート
これは私が得たもので、スカイが提案したことをしようとしています...しかし、うまくいきません。次に進み、ループがアクティブではないと考えたので、引数を変更しました。ランタイムエラーが発生しました!
問題: 式: ベクトル添字が範囲外です!
提案は誰ですか?
string line;
while(getline(infile,line))
{
getline(infile, line);
tempVector.push_back(line);
}
width=line.length();
height=tempVector.size();