1

次のような行を含むファイルから読み取る必要があります。

255 0 0 15 x l Red Yellow,Gray,Blue,Green

この行の最初の 5 つの要素 (スペース区切り) を読みたいとしましょう。私は現在、次のようにしています:

std::string line;
while(file.good()) {
    getline(worldfile, line);
    unsigned space = line.find(" ");
    unsigned r = atoi(line.substr(0, space).c_str());
    line = line.substr(space + 1);
    space = line.find(" ");
    unsigned g = atoi(line.substr(0, space).c_str());
    line = line.substr(space + 1);
    space = line.find(" ");
    unsigned b = atoi(line.substr(0, space).c_str());
    line = line.substr(space + 1);
    space = line.find(" ");
    unsigned gold = atoi(line.substr(0, space).c_str());
    line = line.substr(space + 1);
    space = line.find(" ");
    char resource = line.substr(0, space).c_str()[0];
    // do something with these values
}

このコードの見た目が好きではありません。私のファイルでは問題なく動作しますが、コードの行が次から次へと続くのは好きではありません。これにより、非常に読みにくくなっています。また、自分のコード (ゲーム用) が完成したらオープン ソースとして公開する予定ですが、このようなコードを公開するのは恥ずかしいことです。

どうすればこれをきれいにできますか?

4

1 に答える 1

3

それらをすべて読み取るには、次のようなものが機能するはずです。

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main ()
{
   fstream file;
    file.open("file.txt",ios::in);
    unsigned r,g,b,gold;
    char i,f;
    string line;
    while(file >> r >> g >> b >> gold >> i >> f)
    {
        getline(file,line);
        cout << r << " " << g << " "<< b << " "<< gold << " "<< i << " "<< f << endl;
    }
    return 0;
}
于 2013-04-15T22:02:18.713 に答える