0

我正在尝试编写一个程序,该程序理想地接受指定源文件(读取)和目标文件(写入)的参数。

程序将源文件中的指定字符替换为其他指定字符,然后将输出写入目标文件。

不过,我想处理 3 种特殊情况:

  1. 仅提供要读取的源文件。

    期望行为:显示替换文本到标准输出(终端)的结果

  2. 仅提供要写入的目标文件。

    期望行为:从标准输入读取,替换所需字母并将结果写入提供的目标文件名。

  3. 既不提供源文件也不提供目标文件。

    期望行为:从标准输入读取、替换字符、写入标准输出。

我相信做到这一点的方法是使用freopen(),但我无法理解文件何时打开或freopen()第三个参数(流)如何工作的逻辑。

处理这个问题的传统方法是什么?甚至是freopen()我正在寻找的功能吗?或者是否有一些针对此类情况的鲜为人知的功能?

一些伪代码将不胜感激。

4

2 回答 2

0

第三个参数是您想用文件替换哪个标准文件流。

所以逻辑将是这样的:

const char *input_file = NULL;
const char *output_file = NULL;

// parse arguments, setting the above variables to the appropriate arguments if supplied

if (input_file) {
    freopen(input_file, "r", stdin);
}

if (output_file) {
    freopen(output_file, "w", stdout);
}

然后程序的其余部分使用stdinstdout正常。

于 2022-02-05T00:56:12.190 回答
0

传统的(unixoid)方式是只使用stdinand stdout

如果要提供输入文件,请使用输入重定向:

your_program < input_file

如果要提供输出文件,请使用输出重定向:

your_program > output_file

如果要提供输入文件和输出文件,请使用两种重定向方式:

your_program < input_file > output_file

您甚至可以使用管道将程序添加到命令链中:

run_before | your_program | run_after

这为您提供了最大的灵活性。

仍然可以为您的程序提供选项。

于 2022-02-05T07:49:44.900 回答