我设计了一个带有一些状态转换的解析器。现在我想将一个文件重定向到我在C中创建的解析器中以提供令牌。
我的设计是这样的,我需要在我的字符串末尾有一个空格(''),也就是说,我需要在从文件或标准输入读取的字符串中附加一个空格字符。但问题是索引。 从我需要做的文件重定向
int length=0;
while((c1=getchar())!=EOF)
{
a[length]=c1;
length ++;
}
a[length-1]=' ';
a[length]=EOF;
从stdin读取时,我需要做
int length=0;
while((c1=getchar())!=EOF)
{
a[length]=c1;
length ++;
}
a[length]=' ';
a[length+1]=EOF;
输入既可以来自stdin输入,也可以来自文件重定向(例如./a.out< ac)现在我如何在我的代码中根据输入的类型合并?
答案 0 :(得分: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);
}
}
}