功能不读取ifstream文件

时间:2018-01-28 01:43:05

标签: c++

我正在为我的一个编程类编写代码,我的教授除了在每个函数中都不允许更改任何代码(函数参数和主函数不允许更改)。问题在于其中一个功能是使用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;
    }

1 个答案:

答案 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);