我在编写这个代码时遇到了问题。此代码用于读取两个文本文件,然后在这两个文件中输出行。然后我希望能够放置两个文件并将它们组合在一起,但是第一行有file1文本,而后面就有file2文本。
这是我的代码:
#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 :(得分:1)
首先,不要while (file.good())
或while (!file.eof())
,它不会按预期工作。相反,例如while (std::getline(...))
。
如果您想阅读和打印备用线路,有两种可能的方法:
std::vector
个对象,并从这些向量中读取。或者可能将两个向量组合成一个向量,并打印出来。第一种选择可能是最简单的,但占用的内存最多。
对于第二种选择,您可以这样做:
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);
答案 1 :(得分:0)
或者简单地说:
cout << ifstream(filename1, ios::in | ios::binary).rdbuf();
cout << ifstream(filename2, ios::in | ios::binary).rdbuf();
答案 2 :(得分:0)
你的第二个if语句不在main()函数之外。第一次返回0后;你关闭main() - 函数。 你的代码中的另一个问题是,如果它在main() - 函数内,你将永远不会到达第二个if语句,因为返回0;结束main()。 我猜你只想在第一个文件流“坏”时执行return,所以你需要一个else的范围;