当前位置: > > > > bufio.NewReader(os.Stdin) 和 fmt.Scanln() 有什么区别
来源:stackoverflow
2024-05-01 17:00:45
0浏览
收藏
小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《bufio.NewReader(os.Stdin) 和 fmt.Scanln() 有什么区别》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!
问题内容
package main import ( "bufio" "fmt" "os" ) func main() { in := bufio.NewReader(os.Stdin) fmt.Println("Please input S: ") S, _ := in.ReadString('\n') fmt.Println("Please input J: ") J, _ := in.ReadString('\n') sum := numJewelsInStones(J,S) fmt.Println(sum) } func numJewelsInStones(J string, S string) int { var sum int for _, s := range S { for _, j := range J{ if s ==j { sum ++ } } } return sum }
当我在终端输入“hello”和“h”时。该程序将打印 2,但预期是 1。
如果我使用 fmt.scanln(),结果将为 1。
是什么导致了这个结果?
解决方案
它们完全不同,而且大多不相关。
bufio.NewReader()
“包装 io.Reader 或 io.Writer 对象,创建另一个也实现该接口但提供缓冲和文本 I/O 帮助的对象(Reader 或 Writer)”。 。
换句话说,它所做的就是向(在您的示例中)os.Stdin
添加一个缓冲层。它根本不解析或解释流。
相比之下,从流中读取数据(可能会或可能不会缓冲——即由bufio
包返回),用空格分割输入,将其存储在切片中。
通过阅读文档(我在上面链接到的文档),您可以获得每个文档的具体详细信息。但直接回答你的问题“有什么区别?”就是“绝对的一切。尽管它们可以一起使用,但它们几乎没有任何共同点。”
今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注公众号,一起学习编程~