我需要知道如何在 C++ 中使用 Unix 参数 < 和 > 如果我用 ./program < input file > output file
运行程序有人告诉我程序将从 <
后面声明的文件中读取它将写出到在 >
之后声明的文件
实际代码是这样的
int main(int argc, char** argv)
{
FILE* filein = fopen(argv[1], "r");
FILE* fileout = fopen(argv[2], "w");
...
所以我想把我在程序开始处理时声明的文件放在这里,因为我要使用 filein
和 fileout
稍后在程序中。
我只能使用 stdio.h
所以请保持基本。
提前致谢
最佳答案
这个 shell cmd 语法
./program < input_file > output_file
不必对传递给 main 的参数做任何事情
int main(int argc, char** argv) {
上述输入输出文件可以引用std::cin
和std::cout
这是一个 shell 功能,称为标准输入/输出流重定向。如果你想通过 argv
将额外的参数传递给你的程序,你通常会使用以下语法
./program -x --opt1 < input_file > output_file
如你所说
"I'm only allowed to work with the
stdio.h
so please keep it basic."
在这种情况下,您可以使用预定义的 stdin
/stdout
宏。
FILE* filein = stdin;
FILE* fileout = stdout;
这是你应该使用的默认值。如果你想拥有额外的功能,即用户指定特定的输入/输出文件名作为程序参数,你还应该检查传递给你的 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");
}
}
默认情况下,您的程序从标准输入读取并写入标准输出,如果按上述方式完成的话。因此,只需调用不带任何参数的程序,就会提示用户输入内容。
这是实现控制台程序的首选且最灵活的样式,它应该处理流式输入并转换(处理)到任何输出。
关于C++ 以<输入文件和>输出文件启动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26564208/