从 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 = 1
将 arg
设置为 1 并始终成功,因此从不使用 fp=stdin;
分支。
此外,您的问题没有说明 arg
是如何分配的。是main()
的第一个参数吗?如果是这样,通常称为 argc
。如果您使用约定俗成的名称,其他开发人员将更容易理解您的代码。
编辑
正如@MayurK 指出的那样,使用 1 == arg
而不是 arg == 1
将帮助编译器保护您免受此影响。
正如@EdHeal 指出的那样,一些编译器可以选择检查 if(arg=1)
,因为它很少是您想要的。在 GCC 中,-Wint-in-bool-context
和 -Wparentheses
很有用(或者,更好的是,启动 -Wall
!)。
我有一个程序可以从文件或键盘读取输入。我找到了一种方法来决定输入是从文件还是从键盘插入。
我需要以一种简单的方式实施该决定,因为我不想为每种类型的输入复制我的代码 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 = 1
将 arg
设置为 1 并始终成功,因此从不使用 fp=stdin;
分支。
此外,您的问题没有说明 arg
是如何分配的。是main()
的第一个参数吗?如果是这样,通常称为 argc
。如果您使用约定俗成的名称,其他开发人员将更容易理解您的代码。
编辑
正如@MayurK 指出的那样,使用
1 == arg
而不是arg == 1
将帮助编译器保护您免受此影响。正如@EdHeal 指出的那样,一些编译器可以选择检查
if(arg=1)
,因为它很少是您想要的。在 GCC 中,-Wint-in-bool-context
和-Wparentheses
很有用(或者,更好的是,启动-Wall
!)。