我正在为我的一个编程类编写代码,我的教授除了在每个函数中都不允许更改任何代码(函数参数和主函数不允许更改)。问题在于其中一个功能是使用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&amp;在功能上,因为它通常变得非常错误。
有关更多信息以便提供帮助,这是正在读取的文件中的数据。
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;
}
答案 0 :(得分:1)
请勿在传递给该函数的open()
上调用std::ifstream
。在调用函数之前,确保流已打开应该是调用者的责任。只需阅读给你的任何开放流。
我建议您使用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);