C ++:在IF语句中更改输出文件

时间:2017-08-10 11:14:58

标签: c++ if-statement file-io

这里我展示了我的C ++代码片段,它循环了一些k值,如果k = 0,则应该将输出发送到一个文件(outputk0.txt),如果k!= 0则发送到另一个文件({{1}编译时我遇到了outputnotk0.txt ofstream文件的范围问题。有谁知道如何解决这个问题?

out

3 个答案:

答案 0 :(得分:1)

这应该解决它:

std::unique_ptr<std::ofstream> out;
if(k == 0)
  out = new std::ofstream("outputk0.txt", ios::out);
else
  out = new std::ofstream("outputnotk0.txt", ios::out);

你必须写

 *out << i << " " <<  j <<  " " << cv.U(z,k) << endl;
当然是

如评论中所述,另一个选项是使用open()函数:

std::ofstream out;
if(k == 0)
  out.open("outputk0.txt", ios::out);
else
  out.open("outputnotk0.txt", ios::out);

答案 1 :(得分:1)

你可以通过几种方式解决。 可能的解决方案#1:

std::ofstream语句的顶部声明if,并调用open方法打开该文件。

std::ofstream out;
if(k == 0)
  out.open("outputk0.txt", ios::out);
else
  out.open("outputnotk0.txt", ios::out);

可能的解决方案(家庭)#2: 使用if-else将文件名存储在字符串中,用于传递给std::ofstream构造函数:

1

std::ofstream out(k == 0 ? "outputk0.txt" : "outputnotk0.txt", ios::out);

2

std::string fileName;
if (k == 0)
    fileName = "outputk0.txt";
else // more if cases if needed..
    fileName = "outputnotk0.txt";

std::ofstream out(fileName, ios::out); // use fileName.c_str () if not using C++-11.

3

std::string fileName;
switch (k)
    {
    case 0:
        fileName = "outputk0.txt";
        break;
    // More cases if needed..
    default:
        fileName = "outputnotk0.txt";
    }

std::ofstream out(fileName, ios::out); // use fileName.c_str () if not using C++-11.

答案 2 :(得分:0)

标识符必须在编译时定义(特定类型)这就是我们无法在运行时创建新类型的原因。

在您的情况下,您正在创建一个对象&#34; out&#34;限制在某种条件下,因此请记住,即使条件成功,标识符也不能在声明范围之外使用。

举个例子:

if(1) // always true condition
    int a = 0;
std::cout << a; // you get a compile-time error undeclared identifier
  • 只有当你只需要在那个范围内的变量时,你才可以做这样的事情:

    if(SomConditionIsTrue){
        int var;
        std::cin >> var;
        std::cout << var;
    }
    
  • 考虑这个例子:

    #if(true)
        std::ofstream out("data.txt");
    #endif
    
    out << "To be written into file"; // now it works
    
    #if(false)
        std::ofstream out("data.txt");
    #endif
    
    out << "To be written into file"; // now it doesn't work because the condition fails so no `out` is declared consequently not added by the pre-processor.
    

在你的情况下声明一个外面的对象然后在某些条件下初始化它:

std::ofstream out("outputk0.txt", ios::out);

for(;;){
   out << "something"; // out is visible here. the compiler looks up and sees it.
}