【问题标题】:C++ ignoring cout redirect for some outputsC++ 忽略某些输出的 cout 重定向
【发布时间】:2016-12-15 10:07:01
【问题描述】:

我正在使用命令行和重定向符号启动我的程序

程序 > out.txt

有没有什么方法可以让一些 cout 调用忽略 > 操作符而仍然显示在控制台中?

我想要的是有一个控制台菜单会出现在控制台中,但其余的会被重定向到文件。

谢谢。

【问题讨论】:

    标签: c++ redirect console cout


    【解决方案1】:

    不,没有。

    > 将整个 stdout 流重定向到文件,而不是特定写入该流。如果要写入多个位置,则要使用多个流。例如,您可以使用stderr:

    cout << "redirected" << endl;
    cerr << "not redirected" << endl;
    

    【讨论】:

    • 谢谢,但这是一种黑客行为,不是吗。我希望有一个专门为此目的的流,例如cout2 &lt;&lt; "not redirected" &lt;&lt; endl;
    • 实际上,有一个专门用于写入控制台的流——它叫做cout。如果您想将一些输出写入文件,只需创建一个std::ofstream
    • 我愿意。然而,这是一个学校项目,其中一个规范是将结果写入stdout,以便教师可以轻松地将其重定向到文件。我想这样做的原因是因为控制台菜单有额外的点,但如果你说的是真的,我不知道如何组合这些。
    • @finrod 好吧,cerr 的选项仍然有效,因为cerr 已经绑定到控制台。此外,您可以创建与控制台关联的新流。我知道的一种方式是ofstream fout("console$"),但我不确定它是否可移植。
    【解决方案2】:

    您可以重新格式化您正在做的事情,并在您想要转到 stdout 时使用 std::cout,并使用 Log 函数写入您指定为程序输入的文件。

    有一个Menu 函数显示到std::cout 可能更简洁,并且Log 文件能够配置到它的结束位置。

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 2019-05-30
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多