gpt4 book ai didi

c++ - 函数不读取 ifstream 文件

转载 作者:行者123 更新时间:2023-11-30 05:05:16 25 4
gpt4 key购买 nike

我正在为我的一门编程类(class)编写代码,我的教授不允许更改除每个函数内的代码之外的任何代码(不允许更改函数参数和主函数)。该问题与使用 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

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

编辑:

我摆脱了函数中的 .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::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);

关于c++ - 函数不读取 ifstream 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48482371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com