Aiross 2015-06-12 07:57 采纳率: 0%
浏览 2938

C++读文件没读完就结束,eof已用

这段代码是我写哈夫曼编码的一个解压函数,现在的问题是,没有把我整个文件解压完,像图里面,只解压了一部分然后 ,还有剩下很多没读,
貌似是eof为真,导致读文件结束了 这是怎么回事啊?

void readCodeFile()
{
ifstream inf;
ofstream outf;
int w[200], c = 0;
char s[200];
string code;
HuffTreeTreeArray[100];
HuffNode
tempNode;
char tempChar=0;
int k = 9;

inf.open("test.txt",ios::in);
inf >> c;

for (int i = 0; i < c; i++)
{
    s[i] = inf.get();
    inf >> w[i];
    //cout << s[i] << "\t" << w[i] << "\t"<<i<<endl;
}


Word *word = new Word[c];

for (int i = 0; i < c; i++)
{
    word[i].val = s[i];
    word[i].frq = w[i];
}

for (int i = 0; i < c + 1; i++)
{
    TreeArray[i] = new HuffTree<char>(s[i], w[i]);
}


HuffTree<char> *Tree = buildHuff(TreeArray, c);

codeBuild(Tree->root(), code, word, c);

outf.open("decode.txt");
tempNode = Tree->root();
while (!inf.eof())
{   
    if (k<8)
    {
        if (((tempChar >> (7 - k)) & 1) == 0)
        {
            tempNode = ((IntlNode<char>*) (tempNode))->right();
        }
        else if (((tempChar >> (7 - k)) & 1) == 1)
        {
            tempNode = ((IntlNode<char>*) (tempNode))->left();
        }

        if (tempNode->isLeaf())
        {
            outf << ((LeafNode<char>*) (tempNode))->val();
        //  cout << ((LeafNode<char>*) (tempNode))->val();
            tempNode = Tree->root();
        }
        k++;
    }
    else
    {
        tempChar = inf.get();
        cout << tempChar;
        k = 0;
    }       
}

inf.close();
outf.close();

}

图片说明

  • 写回答

4条回答

  • Tiger_Zhao 2015-06-12 08:52
    关注

    你用的是文本方式读取文件吧?加密内容可能会包含字符\0,而文本方式读取是吧\0判断为eof的。
    要用二进制方式读取。

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料