输出时如何获取输入?
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 界面变得越来越普遍。
以上就是输出时如何获取输入?的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341