- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
考虑以下代码:
ifstream in;
try {
in.exceptions ( ifstream::failbit | ifstream::badbit );
in.open(pConfLocation);
} catch ( ifstream::failure e ) {
throw std::runtime_error("Can't open configuration file\n");
}
vector<string> lns;
string s;
in.clear();
while ( !in.eof() ){
getline( in, s );
boost::algorithm::trim(s);
lns.push_back( s+='\n');
}
所以:
The exception mask is an internal value of all stream objects specifying which state flags have to throw an exception when they are set.
我没有设置ifstream::eofbit,但无论如何在运行时出现以下错误:
terminate called after throwing an instance of 'std::ios_base::failure'
what(): basic_ios::clear
The program has unexpectedly finished.
我无法理解这种行为。我尝试在 while{} 之前使用 in.clear() 但没有效果。 clear() 本身设置 goodbit,据我所知,“标志必须抛出异常”(参见上面的引用),但是当 googbit 设置时它不会导致抛出任何异常......
如果删除
in.exceptions ( ifstream::failbit | ifstream::badbit );
有效。
在这种情况下如何使 getline() 工作?
最佳答案
问题出在您的输入迭代中。 eofbit
仅在上一次读取到达 EOF 时设置,如果下一次读取将只读取 EOF,则不会设置。当后者发生时,failbit
同时被设置。查看讨论 here .
在您的特定情况下,如果文件以换行符结尾(很可能如此),getline()
会读取并包括该换行符并返回。 eofbit
仍未设置。下一个 getline()
然后直接遇到 EOF,并且根据其文档,“如果该函数未提取任何元素,它会调用 setstate(failbit)
。”
关于c++ - 为什么在异常掩码未设置为 eofbit 时 getline() 抛出 'std::ios_base::failure'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13651054/
这段代码永远循环: #include #include #include int main(int argc, char *argv[]) { std::ifstream f(argv[
假设给定一个包含数字列表的非空文本文件, 1 2 3 4 5 然后我们用 std::ifstream 将它们读入数值类型(int、double 等)以及 字符 int main() { ifs
#include #include using namespace std; int main() { fstream file("out.txt", ios_base::app);
编辑:我原来的测试程序代码中有一个细微的错误:" char=" #include using namespace std; void info( int aRelativePos, istream
我想知道为什么 istream::get 将 failbit 和 eofbit 设置在一起。 std::getline 的行为不同:它在遇到文件末尾时设置 eofbit,在您尝试读取文件末尾时设置 f
考虑以下代码: ifstream in; try { in.exceptions ( ifstream::failbit | ifstream::badbit );
我正在尝试阅读尽可能多的 std::complex尽可能从文件(或任何 std::istream )。如果操作失败,我会检查 ios::eof()。如果没有设置,我就假设解析数据有错误,我可以向用户报
我是一名优秀的程序员,十分优秀!