问题描述
- 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();
}
解决方案
你用的是文本方式读取文件吧?加密内容可能会包含字符,而文本方式读取是吧
判断为
eof
的。
要用二进制方式读取。
解决方案二:
你可以试试在文件的最后加一个特定的字符,当遇到这个字符就结束循环
解决方案三:
EOF只是一个宏,值为-1,如果读取失败的情况下,也会返回这个数值
解决方案四:
windows下^D(字符4)作为结束符,应该是文本中包含此字符,可以用""rb""方式打开(二进制打开)
时间: 2024-08-03 15:01:49