2014-04-13 84 views
-1

我有一個程序從標準輸入流stdin通過scanf讀取並打印到stdout。我想通過另一個程序發送輸入。我該如何解決這個問題?用另一個程序寫入到scanf

喜歡的東西:

echo hi | ./prog 

但是,這並不如預期當前的工作。編目前看起來像

#include <stdio.h> 

int main() 
{ 
char buf[200]; 
scanf("%s",buf); 
printf("%s",buf); 
} 

謝謝你的幫助。

+1

請提供任何相關的代碼這個問題得到援助。 – MattSizzle

+0

它以何種方式無法按預期工作?你期望什麼?什麼是實際結果?該程序看起來有效,但毫無意義..你期望什麼其他功能? – Soren

+0

我希望程序以「嗨」響應,但它不打印任何東西。 – jarCrack

回答

3

由於%s忽略前導空格,並在其後的第一個空格停止,你可能要包括在打印的換行符:

#include <stdio.h> 

int main(void) 
{ 
    char buf[200]; 
    scanf("%199s", buf); 
    printf("%s\n",buf); 
    return 0; 
} 

這將從讀取多達199個字符的「字」標準輸入並將其寫入標準輸出。

+0

這工作正常。問題是我不能在這種情況下更改代碼,因爲問題的根源是二進制文件 – jarCrack

+1

@jarCrack然後嘗試「echo hi | ./prog; echo」 –

+0

因此,您有一個可執行文件,嗨'當給予'嗨'作爲輸入,但它忽略了你?調試起來會很棘手。有一點需要注意的是程序的退出狀態(可執行文件),看它是零(成功)還是非零(失敗)。如果它不是零,那麼你提供的東西大概不能令人滿意。如果它爲零,那麼你可能仍然會遇到這樣的問題 - 程序即使在失敗的情況下以零狀態退出也不是個未知數 - 但假設它已經起作用了。你怎麼知道該程序應該做什麼? –

2

程序爲我工作.....

$ cat >prog.c 
#inlcude <stdio.h> 
int main() 
{ 
    char buf[200]; 
    scanf("%s",buf); 
    printf("%s",buf); 
} 
$ make prog 
cc  prog.c -o prog 
$ echo hi | ./prog 
hi 
+0

「hi」後不立即出現提示嗎? –

+0

...是的,提示確實出現在「嗨」之後,這是預期的,因爲沒有印刷新行,我不知道我是否可以分辨這是OP是在抱怨... – Soren

+0

@ JonathanLeffler提示符會發生什麼取決於shell ...非常確定zsh可以配置爲檢查此問題,而不是終止最後一行,添加CR LF本身,並且一些shell僅輸出回車或光標移動序列以確保它們位於最左側的列中。 –

相關問題