4

名前と値のペアを持つファイルから値を読み取るときに、名前セクションをスキップすることができました。しかし、スキップされたデータを格納するダミー文字列を宣言せずに名前セクションをスキップする別の方法はありますか?

テキスト ファイルの例: http://i.stack.imgur.com/94l1w.png

void loadConfigFile()
{
    ifstream file(folder + "config.txt");

    while (!file.eof())
    {
        file >> skip;

        file >> screenMode;
        if (screenMode == "on")
            notFullScreen = 0;
        else if (screenMode == "off")
            notFullScreen = 1;

        file >> skip;
        file >> playerXPosMS;

        file >> skip;
        file >> playerYPosMS;

        file >> skip;
        file >> playerGForce;
    }

    file.close();
}
4

1 に答える 1

6

を使用std::cin.ignoreして、指定された区切り文字までの入力を無視できます (たとえば、行全体をスキップするための改行)。

static const int max_line = 65536;

std::cin.ignore(max_line, '\n');

多くの人が のような最大値を指定することを推奨していますがstd::numeric_limits<std::streamsize>::max()、私はそうしません。ユーザーが誤ってプログラムを間違ったファイルに向けてしまった場合、異常な量のデータを消費するのを待ってから、何かがおかしいと言われることがあってはなりません。

他に2点。

  1. 使用しないでくださいwhile (!file.eof())。それは主に問題につながります。このような場合、関連する値を保持するためにstructorを定義し、そのクラスに対して を定義してから、classoperator>>while (file>>player_object) ...
  2. あなたが今読んでいる方法は、行全体ではなく、一度に「単語」を読もうとしています. 行全体を読みたい場合は、おそらくstd::getline.
于 2013-07-18T15:29:42.900 に答える