首页 > 解决方案 > 写入文件不显示所有内容 c++

问题描述

不知道我哪里出错了我正在尝试用 C++ 写入文件。

这是代码:

struct Student {
   int id;
   std::string name;
    double mark;
   double priority;

   bool operator < (const Student & s) const {
      return (priority < s.priority);
   }
   void print() const {
   std::ofstream myfile;
    myfile.open ("result.txt",std::ios::out);
   myfile << "id: (";
    myfile<< id;
    myfile << ") ";
    myfile<<"name: ";
    myfile<< name;
    myfile << " : ";
    myfile<< " Priority value: ";
    myfile << priority;
    myfile <<"\n";
//  myfile.close();
    std::cout << "name: " << id << ") " << name << " : " << " Priority value: " << priority << std::endl;
   }
};

   void printPriorityQ(std::priority_queue < Student > q) {
      while (!q.empty()) {
         q.top().print();
         q.pop();
      }
      std::cout << std::endl;
   }

我可以成功地将优先级队列的内容输出到控制台,但很难将其输出到 result.txt 文件

我在 result.txt 中的当前输出是打印最后一项并停止

例如我的控制台将显示

名称:(1)bob:优先级值:5

名称:(2) jen:优先级值:4

姓名:(3)詹姆斯:优先级值:3

我的txt文件将显示

姓名:(3)詹姆斯:优先级值:3

编辑:尝试了评论并更改ios::outios::app 我发现它会附加我不想要的文件。在网上查看后,我改用了,ios::trunc但这给了我和以前一样的问题

标签: c++

解决方案


您当前代码中的问题是该print()函数每次调用时都会覆盖输出文件。

一种不需要您使用 ios::app 的可能解决方案是更改函数的签名,如下所示:

void print(std::ofstream& myfile ) const {
    myfile << "id: (";
    myfile<< id;
    myfile << ") ";
    myfile<<"name: ";
    myfile<< name;
    myfile << " : ";
    myfile<< " Priority value: ";
    myfile << priority;
    myfile <<"\n";
    std::cout << "name: " << id << ") " << name << " : " << " Priority value: " << priority << std::endl;
   }

并在循环开始之前打开文件,这样文件只创建一次:

   void printPriorityQ(std::priority_queue < Student > q) {
      std::ofstream outputFile("result.txt");
      while (!q.empty()) {
         q.top().print(outputFile);
         q.pop();
      }
      std::cout << std::endl;
   }

这应该可以解决您的问题。printPriorityQ但是请注意,由于与上述相同的原因,这将导致每次调用文件“result.txt”时都会被覆盖。一个更好的解决方案也可以使用std::ofstream&参考作为输入参数printPriorityQ


推荐阅读