我在使用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/

10-12 23:57