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

发布于 2025-01-15 08:43:25 字数 876 浏览 2 评论 0原文

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

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;
}

当然,这些值不是指定给本地测试变量的,而是在属于 Game 类的字段中,只需使用它们测试其读数是否正确。程序只是挂在 cin >>测试1。我之前尝试过使用 getLine(file, line) ,但没有成功。我做错了什么?干杯

I have a text file in the following format:

100 #gravity
5000 #power
30 #fulcrum

I want to assign these values to named variables, like so:

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;
}

Of course, these aren't destined for the local test variables, but in fields belonging to the Game class, just using these to test its reading correctly. The program just hangs at cin >> test1. Ive tried using getLine(file, line) just beforehand, that didnt work. What am I doing wrong? Cheers

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

未央 2025-01-22 08:43:25

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

而不是 cin >> test1;,执行文件>>测试1;。那么它应该可以正常工作。

You're using cin instead of file for your input lines.

Instead of cin >> test1;, do file >> test1;. Then it should work fine.

夏日浅笑〃 2025-01-22 08:43:25

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

An object of type istream (in this case cin) takes user input. So of course the program will wait for you to input a value and then store it inside test1, test2, and test3 respectively.

To fix your issue, just replace cin with file as such:

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

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

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

file.close();

Output:

>>>> 100, 5000, 30
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文