功能无法在c ++中读取和打印文件内容

时间:2017-01-13 12:35:47

标签: c++ visual-c++

嗨,大家好我正在研究一个RPG游戏的学校项目。我创建了一个load_game函数,它应该通过一个特定的文件,检查文件是否具有用户输入的id,并将特定的字符统计信息加载到全局变量中。 问题是我创建了一个函数来打印文件的内容,以便用户可以看到他们的选项,但它根本不打印任何东西,我做了一个new_player函数,用新的播放器填充相同的文件,并且正常工作。当我将文件更改为另一个文件并手动写入该文件时,它可以正常工作。这是代码:

void load_game()
{
    bool loading = true;
    do{
        ifstream in_stream("Players.txt");
        ofstream out_stream("Players.txt");
        cout << "      The last son of Allheaven                " << endl;
        cout << "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+" << endl;
        char ch;
        in_stream.clear();
        in_stream.seekg(0, in_stream.beg);
        while (in_stream.get(ch))
        {
            cout << ch;
        }
        cout << "         Enter -1 to return to main menu                      " << endl;
        cout << "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+" << endl;
        cout << endl << "Enter a number to access one of the above options: ";
        in_stream.clear();
        in_stream.seekg(0, in_stream.beg);
        int choice;
        cin >> choice;
        while (in_stream >> ID >> Name >> Class >> HP >> Mana >> ATK >> ability_dmg >> Defense >> magic_resist >> player_exp >> player_level)
        {
            if (choice == ID)
            {
                /*game_start();*/
                loading = false;
                break;
            }
            else if (choice == -1)
            {
                system("cls");
                main_menu();
            }
            else if (in_stream.eof())
            {
                in_stream.clear();
                in_stream.seekg(0, in_stream.beg);
                cout << endl << "Error! Invalid ID !" << endl;

            }
        }
        in_stream.close();
        out_stream.close();
    } while (loading);
}

1 个答案:

答案 0 :(得分:1)

主要问题是您打开同一个文件两次。一次输入,一次输出,截断文件(如果存在)。因此,当您创建out_stream时,您将有效地删除文件中的所有数据。

如果要读取和写入同一文件,请使用std::iofstream以读/写模式打开它。使用文本文件很难编辑文件中的数据,所以我建议您打开输出的临时文件,完成后将临时文件重命名为实际文件。

或者在你的情况下,为什么要输出文件呢?您实际上并未在任何地方使用吗?它只是截断你想要阅读的文件。