2012-11-20 76 views
0

當我運行該函數並鍵入一個字符串時,我看到在標準輸出中打印回來的字符串。我相信我有一個緩衝區的問題,但我似乎無法弄清楚這一點。調用fgets的結果在字符串打印到標準輸出

+4

當你說「打印回標準輸出」時,你的意思是終端在鍵入數據時回顯數據嗎? –

+0

@WilliamPursell,編號字符串在我輸入時顯示,但按Enter鍵後也會再次顯示。 – Alex

回答

0

當您在控制檯中鍵入字符時,它們會回顯給您。當您從stdin讀取字符時,仍會讀取這些字符。

或者,您可以將程序的輸出傳送到您自己的程序中,或將文件重定向到標準輸入。在這兩種情況下,字符不會附和道:

echo Program output | ./myprog 

或:

./myprog < fileinput.txt 

編輯 - 聽起來就像是一個終端問題。

你還沒有說明你使用的是什麼系統,或者你如何與它接口,但是我可以通過使用PuTTY通過SSH連接到系統來獲得這種行爲。

我改變終端設置強制「本地回聲」和「本地線路編輯」。然後,每當我按下回車鍵時,我都會迴應這一行。顯然只有其中一個應該開啓。最好是「本地回聲」。

+0

當我輸入回聲時,我很好,但輸入後輸入字符串。 – Alex

+0

然後我認爲這是您的終端設置。我會修改我的答案。 – paddy

+0

我意識到這不是一個真正的問題,我只是認爲有一個問題,因爲代碼的格式。感謝您的答覆。 – Alex

1

當你運行它,如果你看到:

./program 
input<CR> 
input 
<prompt> 

然後你提供的代碼是不負責這樣做。使用一些調試語句或調試器來確定回聲來自哪裏,因爲這不是fgets所做的。

如果您看到:

./program 
input<CR> 
<prompt> 

然後就是剛剛終端將如何工作。除非您禁用該功能(用於輸入密碼),否則它們會在您鍵入時回顯文本。

+0

這也回答了我的問題。我給了@paddy的答案,因爲他是第一個回答我回答的問題。 – Alex

0

這樣做的一個常見原因是在您的終端(推測這是一個仿真器)和OS終端驅動程序中都啓用了回顯功能。假設你使用Unix,如果你這樣做,問題就消失了:

stty -echo 

運行你的程序之前?

相關問題