c++ - getline 返回空字符串

标签 c++ fstream getline string

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

相关文章:

c++ - fstream 替换文件的一部分

c++ - 将数据从txt文件读入 vector

c++ - (C++) 在读取文件时如何使用带整数的 getline()?

c++ - Windows 中仅限本地系统的 ACL

c++ - 将检查 C++ 项目中是否包含冗余的工具

c++ - C++中的指针容器

c++ - 如何使用 fstream fstream::app 标志附加到文件似乎不起作用

c++ - 调用扩展类函数

c++ - 使用 getline 和 stringstream 检查句子中的单词是否在文件中

c++ - 不会等待 getline C++