首页 > 解决方案 > 处理文件或标准输入

问题描述

我正在创建一个处理档案的小程序;像这样运行:

"./program file.txt".

如果没有找到第二个参数,它将从标准输入处理

"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);

因为我想写更少的代码!

标签: cfilestdin

解决方案


由于stdin是 type 的变量FILE *,因此您可以这样做:

FILE *archive;
if (argc==2){
    archive = fopen(argv[1], "r");
else{
    archive = stdin;
}

推荐阅读