2016-10-03 61 views
0

我有一個名爲「obj」的類,它有兩個數據類型一個int和一個double。我試圖只讀第三個對象,但似乎無法弄清楚。在我將其中一種數據類型改爲兩倍之前,它正在工作。我覺得它與類型匹配有關。總結起來,我不能得到它只輸出第三個對象後,文件已經wrriten。有什麼建議麼?輸出一個二進制文件寫入C++

#include<iostream> 
#include<fstream> 

using namespace std; 

class Data { 

public: 
    int num1; 
    double num2; 

    Data() {} 
    ~Data() {} 
    void setData(); 
    void getData(); 
}; 

void Data::getData() 
{ 
    cout << "Enter first number: "; 
    cin >> num1; 

    cout << "Eneter second number: "; 
    cin >> num2; 

} 









#include "class.h" 


    const int SIZE = 5; 
    int main() 
    { 

     Data obj[SIZE]; 

     for (int i = 0; i < SIZE; i++) 
     { 
      cout << "Enter numbers of object " << i+1 << endl; 

      obj[i].getData(); 

     } 


     ofstream outFile; 
     outFile.open("C:\\Users\\juan\\Desktop\\26.bin", ios::out | ios::binary); 

     for (int i = 0; i < SIZE; i++) 
     { 

      outFile.write(reinterpret_cast<char *> (&obj[i].num1), sizeof(obj[i].num1)); 
      outFile.write(reinterpret_cast<char *> (&obj[i].num2), sizeof(obj[i].num2)); 

     } 

     cout << "Writing to file...." << endl; 

     outFile.close(); 

     ifstream inFile; 
     inFile.open("C:\\Users\\juan\\Desktop\\26.bin", ios::in | ios::binary); 

     for (int i = 0; i < SIZE; i++) 
     { 
      inFile.read(reinterpret_cast<char *> (&obj[i].num1), sizeof(obj[i].num1)); 
      inFile.read(reinterpret_cast<char *> (&obj[i].num2), sizeof(obj[i].num2)); 



     } 

     for (int i = 0; i < SIZE; i++) 
     { 
      cout << obj[i].num1 << endl; 
      cout << obj[i].num2 << endl; 
      cout << endl << endl; 
     } 

     inFile.close(); 

     Data third; 
     fstream seekfile; 


     seekfile.open("C:\\Users\\juan\\Desktop\\26.bin", ios::in | ios::binary); 

     seekfile.seekg(2 * sizeof(Data), ios::beg); 

     seekfile.read(reinterpret_cast<char *> (&third.num1), sizeof(third.num1)); 
     seekfile.read(reinterpret_cast<char *> (&third.num2), sizeof(third.num2)); 

     cout << endl << endl; 
     cout << third.num1 << endl; 
     cout << third.num2 << endl; 

     seekfile.close(); 





    } 
+0

建議:1)讓我們確切地知道什麼是不工作。它是編譯錯誤,運行時錯誤還是意外結果? 2)問一個比「任何建議?」更好的問題? – user463035818

+0

它不輸出第三個對象只給我我認爲是一個內存空間 – juanmindset

+0

什麼是'數據'的定義? – Peter

回答

0

問題是sizeof(Data)不是sizeof(int) + sizeof(double)總和從而seekfile.seekg(2 * sizeof(Data), ios::beg)不正確。這

seekfile.seekg(2 * (sizeof(third.num1) + sizeof(third.num2)) 

應該解決這個問題。

請注意,sizeof(Data)大於由於填充造成的分量總和。更多信息請參閱本:

Why isn't sizeof for a struct equal to the sum of sizeof of each member?

另外請注意,如果你重新定義num2int那麼就不需要填充和你原來的代碼工作的話。