-1

我设计了一个带有一些状态转换的解析器。现在我想将一个文件重定向到我在 C 中创建的解析器中以提供令牌。

我的设计是这样的,我需要在我的字符串末尾有一个空格(''),也就是说,我需要在从文件或标准输入中读取的字符串后面附加一个空格字符。但问题是索引。为了从我需要做的文件重定向

int length=0;

while((c1=getchar())!=EOF)
{
a[length]=c1;
length ++;
}
a[length-1]=' ';
a[length]=EOF;

从标准输入读取时,我需要做

int length=0;
while((c1=getchar())!=EOF)
{
a[length]=c1;
length ++;
}
a[length]=' ';
a[length+1]=EOF;

输入既可以来自标准输入输入,也可以来自文件重定向(例如 ./a.out < ac)现在我如何根据输入类型将这些合并到我的代码中?

4

1 回答 1

3

首先,两者cat data | ./a.out产生./a.out < data完全相同的效果,即程序stdin读取文件。

也许您想要的是类似./a.out data. 为此,我建议这样的循环:

void process_my_data(FILE *);  // main logic here!

int main(int argc, char * argv[])
{
    if (argc == 1)
    {
        process_my_data(stdin);
    }
    else
    {
        while (--argc)
        {
            FILE * f = fopen(argv[argc], "rb");
            process_my_data(f);
            fclose(f);
        }
    }
}
于 2012-08-23T08:13:26.723 回答