我创建了下面的程序,它读取3个不同的文件检查它们是否已排序,然后将它们排序为将A和B合并为新文件C.程序正在运行,但即使有数据,C文件也是空的
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;
bool is_sorted(ifstream & ifs)
{
int a, b;
ifs >> a;
while (ifs.good())
{
ifs >> b;
if (a > b)
{
return false;
}
a = b;
}
return true;
}
void merge_sorted(ifstream &ifs_a, ifstream &ifs_b, ofstream &ofs_c)
{
int a, b;
ifs_a >> a;
ifs_b >> b;
while (ifs_a.good() && ifs_b.good())
{
if (a > b)
{
ofs_c << a << endl;
ifs_a >> a;
}
else
{
ofs_c << b << endl;
ifs_b >> b;
}
}
while (ifs_a.good())
{
ofs_c << a << endl;
ifs_a >> a;
}
while (ifs_b.good())
{
ofs_c << b << endl;
ifs_b >> b;
}
}
int main()
{
ifstream a1;
ifstream a;
ifstream b;
ofstream c;
a1.open("A1");
a.open("A");
b.open("B");
c.open("C.txt");
if (is_sorted(a1))
{
cout << "Filen A1 ar sorterad" << endl;
}
else { cout << "Filen A1 ar inte sorterad" << endl; }
if (is_sorted(a))
{
cout << "Filen A ar sorterad" << endl;
}
else { cout << "Filen A ar inte sorterad" << endl; }
if (is_sorted(b))
{
cout << "Filen B ar sorterad" << endl;
}
else { cout << "Filen B ar inte sorterad" << endl; }
if (is_sorted(a) && is_sorted(b))
{
merge_sorted(a, b, c);
}
else
{
cout << "En av filerna ar inte sorterade" << endl;
}
c.close();
ifstream c1;
c1.open("C");
if (is_sorted(c1))
{
cout << "Filen C ar sorterad" << endl;
}
else
{
cout << "Filen C ar inte sorterad" << endl;
}
a1.close();
a.close();
b.close();
c1.close();
return 0;
}
答案 0 :(得分:2)
在is_sorted
函数之后,文件流已到达终点。所有后续读取都不会返回任何内容。您正在尝试合并两个空流。
调用is_sorted后,您需要回放流。使用seekg
member function。
file.seekg(0)