我正在创建一个处理档案的小程序;这样运行:
"./program file.txt".
如果找不到第二个参数,它将从stdin处理
"cat file.txt | ./program"
但是在代码内部……我知道我可以做到:
if (argc==2){
FILE* archive = argv[1];
function_1(archive);
function_2(archive);
...
function_n(archive);
else{
function_1(stdin);
function_2(stdin);
...
function_n(stdin);
}
但是反正我可以这样吗?
file* archive;
if (argc==2){
archive = argv[1];
else{
archive = stdin;
}
function_1(archive);
function_2(archive);
...
function_n(archive);
因为我想减少编写代码!
答案 0 :(得分:2)
由于stdin
是类型FILE *
的变量,因此您可以执行以下操作:
FILE *archive;
if (argc==2){
archive = fopen(argv[1], "r");
else{
archive = stdin;
}
答案 1 :(得分:1)
您可以使用三元运算符创建archive
:
FILE* archive = (argc == 2) ? fopen(args[1], "r") : stdin;
当然,您也必须在最后用支票将其关闭。