从ifstream正确获取值的问题

时间:2013-10-26 18:07:07

标签: c++

**编辑:我通过改变'inStream>>来实现它。 next'to'inStream>> skipws>>下一个'。在我之前的一个函数中(提取最后一个名字)我已经切换了noskipws。显然,切换在函数之间持续?

我有一个程序是一个赋值的一部分,它应该读取一个文本文件,其格式为:“lastname firstname 1 2 3 4 5 6 7 8 9 10”(其中每个都是10个)数字是整数分数。)

我能够读取姓氏和名字,但是当我开始阅读数字时,我只能读取第一个,然后所有其余的都被设置为0。

下面是应该读取分数的函数.inStream已经取消了lastname和firstname。我正在使用的文本文件有一行:

Tosis Halley 85 23 10 95 43 12 59 43 20 77

当运行程序并打印出student.score值从0到9时,第一个正确显示为'85'但所有重置显示为'0'。想法?

void GetScores (ifstream& inStream, record& student)
{
    int score[10] = {-1, -1, -1, -1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1};
    int next;
    int counter = 0;
    string test;

    for (int i = 0; i < 10; i++)
    {
        inStream >> next;
        student.score[i] = next;
    }

}

1 个答案:

答案 0 :(得分:2)

假设输入确实是所有数字,那么该函数应该实际工作。但是,您应始终验证输入确实已正确读取:

for (int i = 0; i != 10 && inStream >> next; ++i) {
    student.score[i] = next;
}
if (!inStream) {
    std::cout << "an input error occured\n";
}