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 回答