类似于istringstream的error(FILE *)

Analogon to ferror(FILE *) for a istringstream?

本文关键字:FILE error istringstream 类似于      更新时间:2023-10-16

我目前正在尝试将代码从使用C风格的file *解析文件移植到c++风格的istringstream。我的程序是并行运行的,我想1)只在第一个CPU上读取文件,2)以字符串形式广播内容到所有其他CPU, 3)让每个CPU解析字符串。

旧版本的解析器基本上做了以下工作:

while (!done) {
    int c = fgetc(infile);
    if (EOF == c) {
        if (ferror(infile)) {
            // throw some error
        }
        return;
    }
    // continue parsing
}

infile是一个FILE*。我现在尝试转换代码如下:

while (!done) {
    char cchar = iss.get(); int c = int(cchar);
    if (EOF == c) {
        if ((iss.rdstate() & ifstream::failbit ) != 0 ) {
            // throw some error
        }
        return;
    }
    // continue parsing
}

iss是一个istringstream。问题是,当达到EOF时,当前c++版本中抛出的错误是总是。所以我没有正确的类比来形容恐惧。有人能帮我吗?

塞巴斯蒂安

当您尝试读取某些内容但已到达文件末尾时,将始终设置failbit。如果您尝试读取某些内容,并且尚未到达文件的末尾,但文件中的数据无法转换为目标类型(例如,您尝试读取int,但文件包含"K"),则也将设置

如果流已经失败,并且您可能正在等待EOF,那么只需测试它:

// read stuff here
if ( iss.eof() ) {
    // failed, but eof is ok
}
else {
    // a real error
}

eof位只在文件结束时设置,而不是其他问题。

相关文章: