-2

**编辑:我通过将“inStream >> next”更改为“inStream >> skipws >> next”来使其工作。在我早期的功能之一(提取姓氏和名字)中,我切换了 noskipws。显然,切换在功能之间持续存在?

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

我可以很好地阅读姓氏和名字,但是当我开始阅读数字时,我只能阅读第一个,然后其余的都设置为 0。

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

托西斯·哈雷 85 23 10 95 43 12 59 43 20 77

当运行程序并打印出从 0 到 9 的 student.score 值时,第一个正确显示为“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;
    }

}
4

1 回答 1

2

Assuming the input is indeed all numbers, the function should actually work. However, you should always verify that inputs were indeed read correctly:

for (int i = 0; i != 10 && inStream >> next; ++i) {
    student.score[i] = next;
}
if (!inStream) {
    std::cout << "an input error occured\n";
}
于 2013-10-26T18:34:39.537 回答