为什么istream :: get没有返回预期的值?

时间:2016-06-02 17:19:07

标签: c++

问题: 当我在几个文件上运行我的代码以提取内容时,在大约20%的文件中,第一次迭代将ab都设置为255(每个位为1),程序立即退出,因为这不应该发生。什么错误可能导致这个?

代码:

    ifstream file(file_name);
    ofstream output(outfile_name);
    vector<string> dictionary; //these are all properly initialized earlier
    unsigned char a, b;

    while(!file.eof())
    {
        a = file.get();
        if(!file.eof()) b = file.get();
        else break;
        int id = b + 256*a;
        if(id < 0 || id > dictionary.size()) //this shouldn't happen
        {
            cout << a << ' ' << b << ' ' << id <<  endl;
            break;
        }
        output << dictionary[id] << ' ';
    }

背景:我有几个大文件,并决定迭代所有文件并生成字典。使用有序字典,我为每个单词分配了一个唯一ID(两个unsigned char s,ab)。然后我用他们唯一的ID替换了所有单词,这就是file现在是unsigned char s的长序列,每个单词有两个。不幸的是,从ID转换回单词似乎无法正常工作。遍历某些文件时,为什么ab设置为255

0 个答案:

没有答案