php小編蘋果今天來給大家介紹一個常見的問題:在PHP中,當我們需要獲取用戶的輸入時,應該如何進行輸出呢?獲取用戶的輸入是編寫交互式程序的重要環節,因此掌握正確的方法十分重要。在PHP中,我們可以使用一些內置的函數來獲取用戶的輸入,例如使用`fgets()`函數從標準輸入中讀取用戶輸入的一行內容,或者使用`fgetc()`函數從標準輸入中讀取一個字符。當然,我們也可以使用`$_GET`或`$_POST`超全局變量來獲取用戶通過表單提交的數據。無論是使用哪種方法,都需要注意對用戶輸入進行必要的驗證和過濾,以確保程序的安全性和穩定性。希望以上介紹能夠幫助到大家!
問題內容
我想要實現的是某種應用程序,它將大量信息記錄到控制臺(例如,從 0 到 1000000000000 的數字),并且能夠通過在控制臺中鍵入命令來停止執行(例如“停止”)。
我想到了使用 goroutine 的想法,但是,我無法輸入命令,因為輸入字段正在更改為輸出。
這是我的代碼:
package main import ( "bufio" "os" ) var process bool = true func commandHandler() { reader := bufio.NewReader(os.Stdin) for process { text, _ := reader.ReadString('\n') if text == "stop\r\n" { process = false } } } func task() { var i int64 = 0 for ; i < 10000000000 || process; i++ { if i%30000000 == 0 { // Just to slow down an output for a while println(i) } } } func main() { go task() commandHandler() }
登錄后復制
以及我得到的結果。字母是我嘗試輸入的輸入,數字是應用程序的輸出
關于如何在我的 go 應用程序中進行正確的輸入/輸出有什么建議嗎?
解決方法
我無法輸入命令,因為輸入字段正在更改為輸出
您可以正常輸入命令。當您鍵入它們時,它們會回顯到您的控制臺。這將與輸出到控制臺的其他所有內容結合在一起,這可能會讓用戶感到困惑 – 但不會讓計算機感到困惑。
假設這實際上與您的操作系統匹配,您的程序運行得很好:
if text == "stop\r\n" {
登錄后復制
在我的操作系統上沒有 \r
。更便攜的方法是使用 strings.trimspace
刪除所有空格。
import ( ... "strings" ) ... ... if strings.TrimSpace(text) == "stop" {
登錄后復制
通過此更改,代碼對我有用。正如您所說,輸出和輸入被插入到屏幕上,但您仍然可以輸入 stop
并結束程序。
關于如何在我的 go 應用程序中進行正確的輸入/輸出有什么建議嗎?
現實世界中幾乎沒有終端程序是交互式的。相反,命令行參數和環境變量在調用時提供其配置。 shell 重定向通常用于保留(在文件中)或分頁(例如 |less
)程序的任何長輸出。
您會看到很多使用交互式終端模型的學術編程,其中程序提示用戶并收集數據,但在現實世界中這種情況非常罕見,并且通常是一種不明智的復雜化。標準輸入通常用于提供計算所需的數據輸入,而不是用戶命令(例如要操作或過濾的數據)。
正如 @tinkerer 所建議的,信號已經可以用來終止你的程序(詳細信息是特定于操作系統的)。因此,實際上無需擔心終端應用程序如何處理標準輸入和輸出的可視化表示,而這些標準輸入和輸出的插值只是為了終止程序。在 posix 環境中還有許多其他信號,其中一些信號完全面向用戶并且可以用于任意目的。
一旦運行時需要更復雜的用戶輸入,程序通常會在套接字上偵聽命令。對于此類程序,由于簡單性和可訪問性,提供 http 服務的 web 界面變得越來越普遍。