2013-08-16 156 views
0

我有一個問題,使這段代碼我寫了編譯。此代碼旨在通讀兩個文本文件,然後在這兩個文件中輸出該行。然後,我希望能夠放置兩個文件併合並它們,但是文件1的文本在第一行,文件2的文本在這之後。閱讀兩個文本文件,然後將它們合併

這裏是我的代碼:

所有的
#include <iostream> 
#include <fstream> 
#include <cmath> 
#include <string> 
using namespace std; 


int main() 

{ 

std::ifstream file1("file1.txt"); 
std::ifstream file2("file2.txt"); 
//std::ofstream combinedfile("combinedfile.txt"); 
//combinedfile << file1.rdbuf() << file2.rdbuf(); 


char filename[400]; 
string line; 
string line2; 

cout << "Enter name of file 1(including .txt): "; 
cin >> filename; 

file1.open(filename); 
cout << "Enter name of file 2 (including .txt): "; 
cin >> filename; 

file2.open(filename); 

    if (file1.is_open()) 
    { 
    while (file1.good()) 
    { 
     getline (filename,line); 
     cout << line << endl; 

    } 
    file1.close(); 
    } 

    else cout << "Unable to open file"; 

return 0; 
} 
if (file2.is_open()) 
    { 
    while (file2.good()) 
    { 
     getline (filename,line); 
     cout << line << endl; 
    } 
    file2.close(); 
    } 

    else cout << "Unable to open file"; 

    return 0;} 
+0

編譯器說什麼? – HAL

回答

1

首先,不要做while (file.good())while (!file.eof()),預期將無法正常工作。相反,例如, while (std::getline(...))

如果你想閱讀和打印備用線,有兩種可能的方式來做到這一點:

  1. 閱讀這兩個文件分爲兩個std::vector對象,並從這些矢量打印。或者可能將這兩個向量組合成一個向量,並打印出來。
  2. 從第一個文件讀取一行並打印出來,然後從第二個文件中讀取並在循環中打印出來。

第一個選擇可能是最簡單的,但使用最多的內存。

對於第二個選擇,你可以做這樣的事情:

std::ifstream file1("file1.txt"); 
std::ifstream file2("file2.txt"); 

if (!file1 || !file2) 
{ 
    std::cout << "Error opening file " << (file1 ? 2 : 1) << ": " << strerror(errno) << '\n'; 
    return 1; 
} 

do 
{ 
    std::string line; 

    if (std::getline(file1, line)) 
     std::cout << line; 

    if (std::getline(file2, line)) 
     std::cout << line; 

} while (file1 || file2); 
0

或者乾脆:

cout << ifstream(filename1, ios::in | ios::binary).rdbuf(); 
cout << ifstream(filename2, ios::in | ios::binary).rdbuf(); 
0

你的第二個if語句是在main()之外 - 功能。第一次返回0之後;你關閉main()函數。 你的代碼中的另一個問題是,如果它在main()函數內,你永遠不會到達第二個if語句,因爲返回0;結束main()。 我想你只是想執行返回,如果第一個文件流是「壞」,所以你需要一個範圍的其他;

相關問題