c++ - 写入文件不显示所有内容 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::out
为ios::app
我发现它会附加我不想要的文件。在网上查看后,我改用了,ios::trunc
但这给了我和以前一样的问题
解决方案
您当前代码中的问题是该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
。
推荐阅读
- c - fgets 在 Linux 和 Windows 中从同一个文件中写入不同的字符串
- scala - 除了 Apache Kafka 之外,还有哪些事件溯源替代方案?
- python - 按法线旋转 vtkDiskSource/vtkPolyDataMapper
- firebase - 如何限制用户可以在 Firebase 中发送的查询数量
- r - 使用对不同数据框中的另一个变量的条件创建一个新变量
- ios - 对 JSON 进行排序以查找字符串不同的每个实例
- html - 如何用 bulma 使部分居中
- r - 使用 purrr 的地图时出错,可能
- c# - C#程序调用C++ dll
- php - 在创建基于 cookie 的会话之前创建 PHP 会话是否重要?