为什么不写文件?

时间:2015-12-13 17:56:31

标签: c++

我创建了下面的程序,它读取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;
}

1 个答案:

答案 0 :(得分:2)

is_sorted函数之后,文件流已到达终点。所有后续读取都不会返回任何内容。您正在尝试合并两个空流。

调用is_sorted后,您需要回放流。使用seekg member function

file.seekg(0)