C++ std::fstream。如何读取行首的数字(浮点数或整数),然后跳到下一个?使用命名变量所以没有循环

c++ std::fstream. How do I read a number at the start of the line (a float or an int), and then skip to the next? Using named variables so no loop

我有一个格式如下的文本文件:

100 #gravity
5000 #power
30 #fulcrum

我想将这些值分配给命名变量,如下所示:

void Game::reloadAttributes()
{
    float test1, test2, test3;
    
    string line;
    std::fstream file;
    file.open("attribs.txt");

    if (file.is_open()) {                

        cin >> test1;
        file.ignore(50, '\n');

        cin >> test2;
        file.ignore(50, '\n');

        cin >> test3;
        file.ignore(50, '\n');

        file.close();
    } 
    else
    {
        cout << "\n****Couldn't open file!!****\n" << endl;
    }

    cout << ">>>> " << test1 << ", " << test2 << ", " << test3 << endl;
}

当然,这些不是用于本地测试变量,而是在属于游戏的字段中class,只是使用这些来测试其正确读取。该程序只是挂在 cin >> test1。我试过事先使用 getLine(file, line),但没有用。我究竟做错了什么?干杯

istream 类型的对象(在本例中为 cin)接受用户输入。所以程序当然会等你输入一个值,然后分别存入test1test2test3里面。

要解决您的问题,只需将 cin 替换为 file 即可:

file >> test1;
file.ignore(50, '\n');

file >> test2;
file.ignore(50, '\n');

file >> test3;
file.ignore(50, '\n');

file.close();

输出:

>>>> 100, 5000, 30

您正在使用 cin 而不是 file 作为输入行。

代替cin >> test1;,做file >> test1;。那么它应该可以正常工作。