2014-01-21 108 views
-1

嗨,我有一个c程序,需要两个数字并添加它们。非常简单,只需在这里学习。但是我有一个csv文件,其中有两列,我已经用bash脚本解析过,并且将其输入到c程序中并不会产生结果。例如,如果我手动类型:c程序不接受分析输入

$ ./adder 1 2 
$ 3 

,然后我的bash程序解析如下

$ ./parser test.csv 
$ 1 2 

其中目前存在csv文件只有一行。即完全一样输入到C文件之前

然后做:

$ ./parser | ./ adder 
$ 

我没有得到任何结果。

这是怎么回事?

+1

'。/'和'adder'之间有一个额外的空间。你真的把它输入终端吗? – 2014-01-21 15:10:33

+0

将'test.csv'文件的确切值添加到您的问题中。另外,在解析文件的位置添加代码。 –

+1

除了前面的注释之外,您还将./parser的输出传递给./adder,而不是./parser test.csv的输出。据推测,你的解析器需要一个文件来解析。 –

回答

5

随着$ ./adder 1 2你正在通过1 2作为程序的命令行参数,这在argv[]可用。

但随着$ ./parser | ./ adderparser输出作为输入传递给adder即如果adder试图从标准输入读取 - stdin(使用功能,如scanfgets等),它会得到作为输入。

如果你的程序没有从标准输入读取,它将不会得到这些。

如果你想让它作为

$ ./parser | xargs ./adder 
+0

@ Rohan非常感谢这对我有用。幸运的是,我也在使用Linux! – user3219765

1

工作,在Linux上使用xargs貌似加法器接受命令行号,并在管你试图在标准输入喂号码。您应该能够实现你想要什么xargs的:

./parser | xargs ./adder 
+0

正是我所需要的。谢谢。 – user3219765

0

你应该尝试使用xargs一个程序的输出读入下一个命令行aruments。

管道重定向stdoutstdin。 stdin不同于在命令行中输入参数。 xargs允许你将stdin(由管道创建)转换为命令行参数。试试这个:

./parser | xargs ./adder 

你可以在脑海里读这个:“解析器的输出用作加法器的参数。”