e********r 发帖数: 2352 | 1 为了使用try ... throw ... catch的方式处理异常,写了以下一段程序,就是读取一
个文件
ifstream file;
file.exceptions(ifstream::failbit | ifstream::badbit);
try{
file.open("./file");
string str;
while(getline(file, str))
{
cout<
}
}
catch(ifstream::failure e)
{
cout<<"Return information: "<
}
file.close();
请问为什么总是会执行catch的语句,如果用最土的方式
ifstream file("./file");
string str;
while(getline(file, str))
{
cout<
}
file.close();
这个倒是绝对不会有问题,请问第一段程序里为什么getline()会throw failbit或者
badbit, 正常读到最后一行的时候应该是设置eof()为1, fail, bad和good都还是0吧. |
t****t 发帖数: 6806 | 2 checked standard. if EOF happens in the middle of a line, you see eofbit
alone. if EOF happens immediately after a newline, a sentry object is
constructed at that time and traits::eof() is returned. and sentry object
set eofbit|failbit.
i think usually badbit alone should be the exception condition. failbit can
happen quite easily.
【在 e********r 的大作中提到】 : 为了使用try ... throw ... catch的方式处理异常,写了以下一段程序,就是读取一 : 个文件 : ifstream file; : file.exceptions(ifstream::failbit | ifstream::badbit); : try{ : file.open("./file"); : string str; : while(getline(file, str)) : { : cout<
|
e********r 发帖数: 2352 | 3 谢谢你的回复,只用一个badbit就好了,看了一下文件,不论新行中有没有内容,都会
出现返回failbit的现象.
can
【在 t****t 的大作中提到】 : checked standard. if EOF happens in the middle of a line, you see eofbit : alone. if EOF happens immediately after a newline, a sentry object is : constructed at that time and traits::eof() is returned. and sentry object : set eofbit|failbit. : i think usually badbit alone should be the exception condition. failbit can : happen quite easily.
|
t****t 发帖数: 6806 | 4 我说的是EOF appear in the middle of line, 即最后一行无回车. 如果用vim打开的
话会提示incomplete last line.
【在 e********r 的大作中提到】 : 谢谢你的回复,只用一个badbit就好了,看了一下文件,不论新行中有没有内容,都会 : 出现返回failbit的现象. : : can
|
e********r 发帖数: 2352 | 5 明白你说意思了,谢谢指点哈.
【在 t****t 的大作中提到】 : 我说的是EOF appear in the middle of line, 即最后一行无回车. 如果用vim打开的 : 话会提示incomplete last line.
|