【问题标题】:Function not Reading ifstream file函数不读取 ifstream 文件
【发布时间】:2018-01-28 01:43:05
【问题描述】:

我正在为我的一个编程课程编写代码,我的教授不允许在每个函数中更改任何代码(不允许更改函数参数和主函数)。问题在于使用 ifstream& 的功能之一。

问题出现在这个特定的函数中,它应该从输入文件(在本例中为programmers.txt)中获取所有数据,但程序根本不会从文件中读取数据。

int readProgrammers(ifstream& inputFile, Programmer programmers[], int maxProgrammers )
{
    inputFile.open("programmers.txt", std::ios_base::in);

    for (int i = 0; i < maxProgrammers; i++)
    {
        inputFile >> programmers[i].programmer_id;
        inputFile >> programmers[i].name;
        inputFile >> programmers[i].lines;
    }
    return 0;
}

我已经搞砸了 .ignore() 以及四次检查我是否把文件名弄错了(我没有)。我还尝试在函数内部不使用 .open 来查看这是否与此有关,但我最终得到了相同的结果。老实说,我不确定问题出在哪里,因为我很少在函数中使用 ifstream&,因为它通常会变得非常错误。

更多信息以提供帮助,这是正在读取的文件中的数据。

1 Alvin 300
2 Brenda 350
3 Chris 250
4 Dana 500
5 Eli 450
6 Faye 320
7 Glen 670
8 Hannah 230
9 Ian 420
10 Jade 380

我应该尝试将此信息存储到数组 Programmer 结构中。我做错了什么导致文件无法读取?

编辑:

我去掉了函数中的 .open 并使用 getLine 和 cout 检查文件是否正在被读取,它是由 getLine 读取的,所以我不确定为什么数据没有被存储/读取通过这段代码:

    for (int i = 0; i < maxProgrammers; i++)
    {
        inputFile >> programmers[i].programmer_id;
        inputFile >> programmers[i].name;
        inputFile >> programmers[i].lines;
    }

【问题讨论】:

  • 不需要std::ios_base::inifstream 中的i 可以解决这个问题。您不检查文件是否已成功打开。如果您填写结构的代码不起作用,您可以使用getline 来读取每一行并输出它以查看您是否获得了预期的数据。
  • Programmer 结构/类是什么样的?您应该检查输入操作是否成功。 if(if &gt;&gt; p.id &gt;&gt; p.name &gt;&gt; p.lines) 或像你一样保持细化,但确保每个都正常。这行得通,也许它会给你一些想法。 coliru.stacked-crooked.com/a/bbda7f7747de97fb

标签: c++


【解决方案1】:

不要在传递给函数的std::ifstream 上调用open()。在调用函数之前确保流是打开的应该是调用者的责任。只需从提供给您的任何开放流中读取即可。

我建议您使用std::getline() 一次读取一行输入流,使用std::istringstream 从每一行读取单个值。

试试这个:

int readProgrammers(ifstream& inputFile, Programmer programmers[], int maxProgrammers)
{
    int count = 0;
    for (int i = 0; i < maxProgrammers; i++) 
    {
        string line;
        if (!getline(inputFile, line)) break;
        istringstream iss(line);
        iss >> programmers[i].programmer_id;
        iss >> programmers[i].name;
        iss >> programmers[i].lines;
        ++count;
    }
    return count;
}

ifstream inputFile("programmers.txt");
Programmer programmers[10];
readProgrammers(inputFile, programmers, 10);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多