C++用<输入文件和>输出文件启动程序

Cri*_*ska 1 c++ command-line file input output

我需要知道如何使用 Unix 参数 < 和 > 在 C++ 中工作,有人告诉我,如果我运行程序,./program < input file > output file程序将从后面声明的文件中读取,并在声明之后<写出到文件中>

实际代码看起来像这样

int main(int argc, char** argv) {

FILE* filein = fopen(argv[1], "r");
FILE* fileout = fopen(argv[2], "w");
Run Code Online (Sandbox Code Playgroud)

...

所以我想把我在程序开始时声明的文件放在这里处理,因为我将在程序中使用fileinfileout稍后。

我只被允许使用,stdio.h所以请保持基本。

提前致谢

πάν*_*ῥεῖ 5

这个 shell cmd 语法

./program < input_file > output_file
Run Code Online (Sandbox Code Playgroud)

不必对传递给 main 的参数做任何事情

int main(int argc, char** argv) {
Run Code Online (Sandbox Code Playgroud)

您可以参考std::cinstd::cout所提到的输入和输出文件。

这是一个 shell 功能,称为标准输入/输出流重定向。如果你想通过你的程序传递额外的参数,你argv通常会使用以下语法

./program -x --opt1 < input_file > output_file
Run Code Online (Sandbox Code Playgroud)

正如你所说

“我只被允许使用,stdio.h所以请保持基本。”

在这种情况下,您可以使用预定义的stdin/stdout宏。

FILE* filein = stdin;
FILE* fileout = stdout;
Run Code Online (Sandbox Code Playgroud)

这是您应该使用的默认值。如果您想要附加功能,即用户指定特定的输入/输出文件名作为程序参数,您还应该检查传递给 main 的命令行参数:

int main(int argc, char* argv[]) {
    FILE* filein = stdin;
    FILE* fileout = stdout;

    if(argc > 1) {
        filein = fopen(argv[1], "r");
    }
    if(argc > 2) {
        fileout = fopen(argv[2], "w");
    }
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,您的程序从标准输入读取并写入标准输出(如果按上述方式完成)。因此,只需在不带任何参数的情况下调用该程序,就会提示用户输入某些内容。

这是实现控制台程序的首选和最灵活的样式,它应该处理流输入并将(处理)转换为任何输出。