【问题标题】:C ++: How to write to multiple files with different names every loop?C ++:如何在每个循环中写入具有不同名称的多个文件?
【发布时间】:2018-05-28 23:23:59
【问题描述】:

我有一个创建输出的程序:

std::ofstream OutA("A.dat");

这个程序中有一个循环,其中创建数据以放入 A:

for ( k = 1; k < n_iterations ; k++ ){
OutA << Data_for_A << std::endl;
}

但是,现在我想做另一个循环。

我将放入A中的值的演变取决于一个变量T。 所以,我会为不同的 T 制作几张表。会有这样的循环:

for ( T = 0; T < x; T = T + 0.5){
    for ( k = 1; k < n_iterations ; k++ ){
    OutA << Data_for_A << std::endl;
    }
}

但是如果循环改变T的值,它会根据变量T写入不同名称的不同文件,这会很方便。

例子:

  • 第一次运行循环时,将数据传递给“OutA1.dat”,第二次将数据传递给“OutA2.dat”,然后是索引 1,2,...

    李>
  • 或者说索引不是1,2,...而是T的值。因此:“OutA_T0.dat”,在下一个“OutA_T0.5.dat”,索引不同T = 0,0.5 , 1.1.5, ...

最好的方法是什么?

【问题讨论】:

  • T转换成字符串,并用它来构造文件名。然后使用该文件名创建一个std::ostream
  • 如果x 是已知数字或具有可预测且合理的上限的数字,您可以根据需要预先生成所有名称并从表格中读出它们。

标签: c++ file loops filenames


【解决方案1】:

使用 std::to_string 函数。

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

string Data_for_A() {
    return "hello";
}

int main() {
    double x = 3;
    int n_iterations = 5;

    for (double T = 0; T < x; T = T + 0.5) {
        string name = "OutA_T" + std::to_string(T) + ".dat";
        std::ofstream OutA(name.c_str());
        for (int k = 1; k < n_iterations ; k++ ) {
            OutA << Data_for_A() << std::endl;
        }
    }
    return 0;
}

【讨论】:

  • 如果我使用“name”而不是“name.c_str()”有什么区别?我在这里进行了测试,它给了我相同的结果。
  • @GabrielHenrique 这里没有区别,.c_str() 是不必要的。与 C++ 标准库中的大多数其他函数一样,std::ofstream 的构造函数具有重载,可以同时采用 std::strings 和 C 风格的字符串。
  • string 位于std 命名空间中,就像ofstream 一样。您不妨在任何地方都使用std:: 并删除using namespace std;,这是不好的做法。
猜你喜欢
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 2015-01-19
  • 1970-01-01
  • 2017-06-19
  • 2017-03-13
相关资源
最近更新 更多