【发布时间】: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::in,ifstream中的i可以解决这个问题。您不检查文件是否已成功打开。如果您填写结构的代码不起作用,您可以使用getline来读取每一行并输出它以查看您是否获得了预期的数据。 -
Programmer 结构/类是什么样的?您应该检查输入操作是否成功。
if(if >> p.id >> p.name >> p.lines)或像你一样保持细化,但确保每个都正常。这行得通,也许它会给你一些想法。 coliru.stacked-crooked.com/a/bbda7f7747de97fb
标签: c++