gpt4 book ai didi

c++ - 模拟 istringstream 的 ferror(FILE *)?

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:31 25 4
gpt4 key购买 nike

我目前正在尝试将代码从使用 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 是一个文件*。我现在尝试转换代码如下:

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++ 版本中总是会抛出一个错误。所以我没有正确的 ferror 类比。谁能帮我解决这个问题?

塞巴斯蒂安

最佳答案

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

关于c++ - 模拟 istringstream 的 ferror(FILE *)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5887845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com