2014-01-21 49 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 

你可以在腦海裏讀這個:「解析器的輸出用作加法器的參數。」