2011-04-19 59 views
2

我遇到上述標題有問題。我已經嘗試了以下內容,但它沒有采取正確的行爲。使用Ifstream將文本文件中的數字添加到C風格數組

void ArrayIntStorage::read(ifstream& in) 
{ 
    if(in.is_open()) 
    { 
     while(!in.eof()) 
     { 
      in.getline(arrayStorage, sizeof(in)); 
     } 
    } 
} 

ofstream& ArrayIntStorage::write(ofstream &out) const 
{ 
    for (int i = 0; i < sizeof arrayStorage; i++) 
    { 
     out << arrayStorage[i] << endl; 
    } 
    return out; 
} 

我是C++編程的新手,所以我可能在做一些愚蠢的事情。提前致謝。

+0

arrayStorage是什麼類型?該文件的格式是什麼? – 2011-04-19 13:31:15

+0

你的預期行爲是什麼,你究竟得到了什麼? – 2011-04-19 14:33:30

回答

1

我會猜測你正在讀/寫一個整數數組。看起來你可能錯誤地讀取了sizeof(in),而不是讀取方法中的sizeof(arrayStorage)。

0

您的代碼有幾個問題。對於初學者,您 不會向我們展示arrayStorage的聲明,所以我們必須 猜測它:我猜int arrayStorage[N],(其中N是一些 常數)。接下來,閱讀:

  • 在循環中使用`istream :: eof`永遠不會正確。一旦輸入失敗,此函數僅具有含義;在 之前,即使最後一次輸入成功,當沒有任何其他內容返回到 時,它可以返回'false',而'true'。你感興趣的 函數是`fail`,這就是當 需要`bool`的上下文中使用'istream`時,間接調用的 。
  • `getline`需要`char []`,並且讀取字符,而不是 int。

如果所有的文件中包含的這些INT的,標準的成語 閱讀它們是:

for (int i = 0; in && i < N; ++ i) { 
    in >> arrayStorage[i]; 
} 

在實踐中,你可能會想要多一點:這是一個錯誤,如果 該文件不包含足夠的int?如果它包含太多? 並且您將要在之後驗證失敗 歸因於文件結尾,而不是 文件中的某些隨機亂碼。或者也許你想(或需要)驗證格式更多, 確保一行中不會有多個int。

您的輸出功能看起來幾乎沒問題;最後一個索引應該是N,而不是sizeof arrayStorage(它返回數組中的字節數,而不是元素數)。後來,在下游, 您需要檢查 關閉文件後是否沒有錯誤;沒有什麼比 程序更令人沮喪,它說它成功了,而實際上只有部分數據將它存入磁盤。

相關問題