【发布时间】:2014-02-07 11:19:34
【问题描述】:
可以编写一个识别文件是否被传递的代码,如下所示:
program.out < file.dat
我为此寻找答案,因为我想编写代码来做这样的事情:
int main (int argc, char *argv[])
{
char filename[50];
if ( argc > 1 )
{
strcpy (filename, argv[1]);
}
else if ( SOMETHING )
{
/* copy the stdin into fin (?) */
}
FILE *fin;
fin = fopen (filename, "r");
/* ... */
fclose(fin);
}
return 0;
}
如果文件以< 传递,则SOMETHING 的计算结果为1,否则为0。
如果可能,我正在寻找使用标准 C 的解决方案。
【问题讨论】:
-
通常的约定是用户将文件名作为参数传递,如果他们不提供从标准输入读取的文件名参数。你为什么违反这个?
-
@Barmar。我没有违反这一点,我是在问我应该怎么做才能做到你所说的!仅当 “他们不提供文件名参数” 时,我如何才能从标准输入读取?
-
不,你正在做相反的事情。如果他们不重定向输入,您正在从硬编码的文件名中读取。
-
现在我已经编辑了代码。