从 stdin 或 file 输入,C

Input either from stdin or file , C

我有一个程序可以从文件或键盘读取输入。我找到了一种方法来决定输入是从文件还是从键盘插入。

我需要以一种简单的方式实施该决定,因为我不想为每种类型的输入复制我的代码 2 次。

我尝试了类似下面的代码,但仅适用于输入文件 (arv == 1),而它从 stdin 获取分段错误。

调试 arg == 0 后出错

(_IO_fgets (buf=0xbffffaac "013", n=100, fp=0x0) at iofgets.c:52)

代码:

FILE *fp;

if (arg = 1)
    fp = fopen (operationfile, "r");
else
    fp = stdin;

while (fgets(buffer, sizeof(buffer), fp) != NULL)

有快速的方法吗?

if(arg == 1) /* == */
{
    ....

应该会解决你的大部分麻烦。 arg = 1arg 设置为 1 并始终成功,因此从不使用 fp=stdin; 分支。

此外,您的问题没有说明 arg 是如何分配的。是main()的第一个参数吗?如果是这样,通常称为 argc。如果您使用约定俗成的名称,其他开发人员将更容易理解您的代码。

编辑

  • 正如@MayurK 指出的那样,使用 1 == arg 而不是 arg == 1 将帮助编译器保护您免受此影响。

  • 正如@EdHeal 指出的那样,一些编译器可以选择检查 if(arg=1),因为它很少是您想要的。在 GCC 中,-Wint-in-bool-context-Wparentheses 很有用(或者,更好的是,启动 -Wall!)。