2012-10-28 135 views
1

我想用fstream填充兩個數組。一個是字符串,一個是int。字符串數組(名稱)填充很好,但char數組只填充第一個值。爲什麼不是數組填充?

void fillInventory(ifstream &fin, int costArray[],string itemArray[]) 
{ 
    string name = "junk"; 
    string cost; 
    int i = 0; 
    int max = 0; 
    stringstream convert; 

    while(name != "none") 
    { 
     getline(fin, name); 
     getline(fin, cost); 
     if(name != "none") 
     { 
      itemArray[i] = name; 
      convert<<cost; 
      convert >> costArray[i]; 
     } 
     i++; 
    } 
} 

我使用stringstream錯誤或是我的邏輯關閉,或其他什麼?

+0

成本是一個整數,正確嗎? – chris

+0

是的,我認爲這對我來說是最簡單的方式。 –

+0

你的整個int數組是用第一個值填充還是隻填充數組的第一個元素? – chris

回答

2

當你這樣做:

convert >> costArray[i]; 

你已經達成了stringstream的,這臺eofbit標誌,導致未來操作失敗的EOF。重置標誌以繼續:

convert >> costArray[i]; 
convert.clear(); 
+0

真棒,謝謝你們。希望我能給你一個接受。它設置了什麼標誌,你能解釋一下還是指點我一個很好的參考?(我剛剛在9月份開始學習......) –

+0

@DanielBall,http://en.cppreference.com/w/cpp/io/ basic_iostream。當'operator >>'命中EOF時,它會設置'eofbit',意味着它到達了文件的末尾。這就讓未來的行動讓事情不被修改。如果你輸入一個int,但你輸入一個字符,你也會看到這種行爲。使用'clear()'重置標誌。 'fail()'在EOF上返回'true'的好處是它允許一個很好的循環:'while(cin >> num)'或'while(fin >> num)'。 – chris

+0

謝謝克里斯,我會盡力記住這一點。 –

相關問題