我遇到来自fstream的getline指令有问题 . 这是我的代码片段:
boolean_1=true;
while(true)
{
if(boolean_1)
{
//some stuff
}
else
{
save_file.open("save.txt", fstream::in);
//some stuff
save_file.close();
}
mission_file.open(filename, fstream::in);
mission_file.getline(buffer_line, 256);
//some other stuff
boolean_1=false;
save_file.open("save.txt", fstream::out);
//write something
save_file.close();
}
此代码应在第一次运行时打开mission_file,并在下一次迭代时打开一个保存文件 . 保存文件在每个循环结束时创建 . 至少它应该像这样工作 . 因为,第一次一切都完美无缺,但在下一次迭代中,“mission_file.getline(buffer_line,256);”返回一个空行,使程序崩溃 . 此外,如果boolean_1从false开始,则循环工作正常,直到下一个循环 .
我已经检查了所需的“.txt”的存在,task_file和save_file返回is_open()都是真的 .
2 回答
它发布了's impossible to see from the code extracts that you'但是听起来你在每个周期重复使用相同的
std::fstream
对象 .在需要重新打开文件的位置在循环内创建一个新的本地对象会更清楚 .
如果必须重新使用相同的
fstream
对象来打开新文件(或另一次使用相同的文件),则必须确保在从新文件读取之前清除任何流错误标志 .在第一次从新文件读取之前的某个时刻执行
clear
应该执行此操作 .你确定
mission_file
正在关闭,因为我没有看到mission_file.close()
. 或者是你错过了将这一行放在代码片段中 .