我在使用 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”是否存在,mission_file 和 save_file 都返回 is_open() true。
最佳答案
从您发布的代码摘录中无法看出,但听起来您在每个周期都重复使用相同的 std::fstream
对象。
在需要重新打开文件的地方在循环内创建一个新的本地对象会更清楚。
如果您必须重新使用相同的 fstream
对象来打开一个新文件(或另一个相同的文件),您必须确保在从新文件读取之前清除所有流错误标志。
在第一次从新文件中读取之前的某个时间执行clear
应该可以做到这一点。
mission_file.clear()
关于c++ - getline 返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3537030/