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)
...
所以我想把我在程序开始时声明的文件放在这里处理,因为我将在程序中使用filein和fileout稍后。
我只被允许使用,stdio.h所以请保持基本。
提前致谢
这个 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::cin和std::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)
默认情况下,您的程序从标准输入读取并写入标准输出(如果按上述方式完成)。因此,只需在不带任何参数的情况下调用该程序,就会提示用户输入某些内容。
这是实现控制台程序的首选和最灵活的样式,它应该处理流输入并将(处理)转换为任何输出。