我遇到来自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()true。
答案 0 :(得分:2)
从您发布的代码提取中无法看到,但听起来您在每个周期重复使用相同的std::fstream
对象。
在您需要重新打开文件的位置在循环内创建一个新的本地对象会更清楚。
如果必须重新使用相同的fstream
对象来打开新文件(或另一次使用相同的文件),则必须确保在从新文件读取之前清除任何流错误标志。
在第一次从新文件中读取之前的某个时刻执行clear
应该这样做。
mission_file.clear()
答案 1 :(得分:0)
您是否确保mission_file
被关闭,因为我看不到mission_file.close()
。或者你只是错过了将这一行放在代码片段中。