2015-01-21 70 views
0

我需要將兩個文本文件放在一個矢量數組中,然後將它們寫入一個新的文本文件中。 將它們合併後。新文件具有多餘字符。合併兩個文本文件會產生更奇怪的結果

FE:緩衝區的

f1.txt ("text1") 
f2.txt ("text2.") 
f12.txt ("text1˙text2.˙W64") 

內容: 「文本1文本2 W64」

下面是代碼:

int main(){ 
     enum errorcode{FNF,FNC}; 
     vector<char> buffer; 
     char ime[255]; 
     cin>>ime;//first file 
     ifstream ud1(ime,ios::in); 
     if(ud1.is_open()){ 
         while(!ud1.eof())buffer.push_back(ud1.get()); 
         ud1.close(); 
         } 
     else {cout<<"File not found.";return FNF;} 
     cin>>ime;//second file 
     ifstream ud2(ime,ios::in); 
     if(ud2.is_open()){ 
         while(!ud2.eof())buffer.push_back(ud2.get()); 
         ud2.close(); 
         } 
     else {cout<<"File not found.";return FNF;} 
     cin>>ime;//new file 
     ofstream id(ime,ios::out); 
     if(id.is_open()){ 
         for(int i=0;i<buffer.capacity();i++)id.put(buffer[i]); 
         id.close(); 
         } 
     else {cout<<"File not created.";return FNC;} 
     return 0; 

     } 

我想這是因爲記事本或文件本身。 你能告訴我這個理由嗎。

+1

我想'ID << ud1.rdbuf()<< ud2.rdbuf();'驗證所有三個文件打開後成功將縮短這很多。無論如何,使用'.eof()'id你的循環條件[**是錯誤的**](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered -錯誤)。 – WhozCraig 2015-01-21 07:26:08

回答

0

您正在使用Vector capacity:返回當前爲矢量分配的存儲空間大小,用元素表示。

您必須使用vector size:返回矢量中元素的數量。這是向量中保存的實際對象的數量,不一定等於其存儲容量。

關於˙

請看istream::get返回值:

返回值

的第一個簽名返回讀取的字符,或結束文件中的值( EOF)如果流中沒有字符可用(請注意,在這種情況下,失敗位標誌也會被設置)。

所以,你可以改變環路這樣:

while(!ud1.eof()){ 
    int tmpChar = ud1.get(); 
    if(!ud1.eof()) 
     buffer.push_back(tmpChar); 
} 
+0

感謝您的輸入。在改變容量之後,W64消失了,但是˙留在最後的文字之間。 – pajser 2015-01-21 07:24:45

+0

看看我的編輯「關於˙」 – Lucian 2015-01-21 07:38:32