2013-10-26 51 views
-2

**编辑:我通过将'inStream >> next'更改为'inStream >> skipws >> next'来解决问题。在我之前的一个函数中(拉取最后一个名字),我已经切换了noskipws。显然,切换持续功能之间?从ifstream正确获取值的问题

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

我能够在姓和名字精细阅读,但是当我去开始阅读的数字,我只能在第一个读取,然后其余全部被置为0。

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

细胞增多哈雷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; 
    } 

} 
+0

看起来正确的给我。你如何打印这些值? (和'计数器'的目的是什么?) – jrok

+0

你是否在读完名字和姓氏后调用这个函数? – P0W

+2

本地'score'数组的用途是什么?你永远不会读它或写信给它。 – Kvothe

回答

2

假设输入确实是所有的数字,该函数应该实际上工作。然而,你应该始终验证输入被确实正确地读出:

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