【问题标题】:how to store results of ./a.out to a text file如何将 ./a.out 的结果存储到文本文件中
【发布时间】:2023-03-27 03:34:01
【问题描述】:

我想知道是否有任何方法可以将我的程序结果存储到文本文件中。我知道您可以执行类似 ./a.out > output.txt 之类的操作,但对于我的程序,在我输入 ./a.out 后,我​​会再次提示输入 TIME:我输入的时间量,然后点击输入算法执行并输出结果。

程序输出一个stage一段时间,基本上我的输出是这样的:

time 0:00 stage 1

time 0:05 stage 1

...

time 2:05 stage 2

如何将输出存储到文本文件中?

【问题讨论】:

  • 实际上调用你的程序二进制a.out是一个非常坏习惯。您可以使用gcc -Wall -g single.c -o singleprog 编译一个单文件源文件single.c,然后运行./singleprog(当然,使用更合适的名称)。对于多源文件程序,学习使用make 或其他构建器。

标签: c linux shell terminal


【解决方案1】:

最简单的方法是 sudo_O 告诉你的(它适用于每个操作系统)

./a.out <in.txt >out.txt. 

如果您想在 C 中执行此操作,请使用 freopen() (http://www.cplusplus.com/reference/clibrary/cstdio/freopen/)

 freopen ("myoutput.txt","w",stdout);
 freopen ("myinput.txt","r",stdin);

这会将 stdout 重定向到 myoutput.txt,因此所有 printfs 都会转到“myoutput.txt”。 还将标准输入重定向到 myinput.txt,因此所有 scanfs 都从“myinput.txt”读取。

【讨论】:

    【解决方案2】:

    一种方法是将结果打印到stderr

    fprintf(stderr, "time %d:....");
    

    并将stderr 重定向到output.txt

    ./myprog 2> output.txt
    

    注意:如果您不想打开文件,这是一种解决方法,我不喜欢将stderr 用于除错误之外的任何内容。

    【讨论】:

    • @sudo_O 是的,在读取输入后,我们将输出打印到stderr 并重定向,您的方式要求用户首先将所有输入写入文件
    • 我们中的一个人在这里遗漏了什么?在您的情况下,每次仍会提示用户输入?
    • @sudo_O 是的,这就是首先需要的
    • 我不同意,将非错误打印到stderr 是不好的做法,我认为在这里重定向输入是一个更好的教训,会说这更像是hack,无论如何...+1
    【解决方案3】:

    一种解决方案是将 TIME 参数作为参数传递并使用 ./a.out time > output.txt 将其输出到文件中。

    【讨论】:

    • 谢谢。我使用了 sudo_O 的方法,但我也会尝试这个。你们摇滚。我放弃了你:)
    【解决方案4】:

    所以也重定向输入:

    ./a.out &lt; input.txt &gt; output.txt

    其中input.txt 包含时间量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多