2013-10-26 53 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"; 
}