我有一個程序從標準輸入流stdin
通過scanf讀取並打印到stdout
。我想通過另一個程序發送輸入。我該如何解決這個問題?用另一個程序寫入到scanf
喜歡的東西:
echo hi | ./prog
但是,這並不如預期當前的工作。編目前看起來像
#include <stdio.h>
int main()
{
char buf[200];
scanf("%s",buf);
printf("%s",buf);
}
謝謝你的幫助。
我有一個程序從標準輸入流stdin
通過scanf讀取並打印到stdout
。我想通過另一個程序發送輸入。我該如何解決這個問題?用另一個程序寫入到scanf
喜歡的東西:
echo hi | ./prog
但是,這並不如預期當前的工作。編目前看起來像
#include <stdio.h>
int main()
{
char buf[200];
scanf("%s",buf);
printf("%s",buf);
}
謝謝你的幫助。
由於%s
忽略前導空格,並在其後的第一個空格停止,你可能要包括在打印的換行符:
#include <stdio.h>
int main(void)
{
char buf[200];
scanf("%199s", buf);
printf("%s\n",buf);
return 0;
}
這將從讀取多達199個字符的「字」標準輸入並將其寫入標準輸出。
這工作正常。問題是我不能在這種情況下更改代碼,因爲問題的根源是二進制文件 – jarCrack
@jarCrack然後嘗試「echo hi | ./prog; echo」 –
因此,您有一個可執行文件,嗨'當給予'嗨'作爲輸入,但它忽略了你?調試起來會很棘手。有一點需要注意的是程序的退出狀態(可執行文件),看它是零(成功)還是非零(失敗)。如果它不是零,那麼你提供的東西大概不能令人滿意。如果它爲零,那麼你可能仍然會遇到這樣的問題 - 程序即使在失敗的情況下以零狀態退出也不是個未知數 - 但假設它已經起作用了。你怎麼知道該程序應該做什麼? –
程序爲我工作.....
$ 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
「hi」後不立即出現提示嗎? –
...是的,提示確實出現在「嗨」之後,這是預期的,因爲沒有印刷新行,我不知道我是否可以分辨這是OP是在抱怨... – Soren
@ JonathanLeffler提示符會發生什麼取決於shell ...非常確定zsh可以配置爲檢查此問題,而不是終止最後一行,添加CR LF本身,並且一些shell僅輸出回車或光標移動序列以確保它們位於最左側的列中。 –
請提供任何相關的代碼這個問題得到援助。 – MattSizzle
它以何種方式無法按預期工作?你期望什麼?什麼是實際結果?該程序看起來有效,但毫無意義..你期望什麼其他功能? – Soren
我希望程序以「嗨」響應,但它不打印任何東西。 – jarCrack