当前位置: > > > > bufio.NewReader(os.Stdin) 和 fmt.Scanln() 有什么区别
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的技术知识我们会一点点深入介绍,欢迎大家关注米云公众号,一起学习编程~
